كيفية تحويل الأنواع الرقمية بأمان وبطريقة اصطلاحية في 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. تحويل الأعداد العشرية إلى أعداد صحيحة والعكس