Avatar ·

كيفية تحويل الأنواع الرقمية بأمان وبطريقة اصطلاحية في Rust؟

مرحبًا! لقد بدأت مؤخرًا في تعلم Rust وواجهت مشكلة في تحويل الأرقام. في لغات أخرى (C++, Python) كنت أكتب ببساطة `(int)float_var` أو `int(float_var)` وكان كل شيء يعمل. لكن في Rust، يشتكي المترجم باستمرار. إليك مثال على الكود الذي أحاول كتابته: ```rust fn main() { let a: u8 = 10; let b: u16 = 20; let sum = a + b; // خطأ: لا يمكن إضافة `u16` إلى `u8` let pi: f64 = 3.14159; let int_pi: u32 = pi; // خطأ: متوقع `u32`، وُجد `f64` let x: i32 = 100; let y: u32 = x; // خطأ: متوقع `u32`، وُجد `i32` } ``` أفهم أن Rust صارم في الأنواع، لكن كيف يمكن إجراء هذه التحويلات بشكل صحيح؟ سمعت عن `as`، لكنه يتصرف بشكل خطير عند overflow. هل هناك طرق آمنة واصطلاحية؟ أحتاج إلى: 1. التحويل بين الأعداد الصحيحة ذات الأحجام المختلفة (u8 -> u16، i32 -> u64) 2. التحويل بين الأنواع الموقعة وغير الموقعة 3. تحويل الأعداد العشرية إلى أعداد صحيحة والعكس