Avatar ·

هل توجد عملية أخذ المعامل (وليس باقي القسمة) في Rust؟

مرحبًا بالجميع! لقد بدأت مؤخرًا في تعلم Rust، وانتقلت من Python، وواجهت مشكلة غير متوقعة. في Python، اعتدت أن العامل `%` يعيد دائمًا نتيجة غير سالبة، أي المعامل الرياضي للعدد. على سبيل المثال، `(-5) % 3` في Python يعطي `1`. هذا مريح جدًا للفهارس الدورية، والعمل مع الساعات، وأيام الأسبوع، وأي حساب حلقي. لكن في Rust، العامل `%` كما اكتشفت، يعيد باقي القسمة (remainder) وليس المعامل. وبالنسبة للأعداد السالبة، يتصرف بشكل مختلف: `(-5) % 3` في Rust يعطي `-2`. هذا يكسر كل منطقي! أكتب دالة بسيطة لتحريك فهرس في مصفوفة: ```rust fn shift_index(current: usize, delta: i32, len: usize) -> usize { let new_index = (current as i32 + delta) % len as i32; new_index as usize } ``` عندما يكون `delta` سالبًا، يتعطل الكود بخطأ أو يعطي نتيجة خاطئة. أفهم أن هذه عمليات حسابية مختلفة، لكني أحتاج تحديدًا إلى المعامل الكلاسيكي (بحيث تكون النتيجة دائمًا في النطاق `[0