كيفية مطابقة قيم التعداد (enum) مع الأعداد الصحيحة (i32, u64) في Rust؟
مرحبًا أيها الزملاء! لقد بدأت للتو في تعلم Rust وواجهت مشكلة تبدو بسيطة، لكنني لا أستطيع إيجاد حل أنيق.
لدي تعداد `Color` يصف الألوان:
```rust
enum Color {
Red,
Green,
Blue,
}
```
أريد تعيين قيمة عددية صحيحة لكل خيار، بحيث، على سبيل المثال، `Red` يقابل 0، و`Green` يقابل 1، و`Blue` يقابل 2. ثم أحتاج إلى:
1. الحصول على الرقم من خيار التعداد (مثلًا، من `Color::Green` الحصول على `1`).
2. إجراء التحويل العكسي: من رقم (مثلًا، `2`) الحصول على الخيار `Color::Blue`.
في C++ أو C# كنت سأكتب ببساطة `(int)color` أو `(Color)2`. في Python كنت سأستخدم قاموسًا. لكن في Rust كل شيء أكثر صرامة مع الأنواع.
حاولت استخدام `as`:
```rust
let c = Color::Red;
let n = c as i32; // خطأ: non-primitive cast
```
المترجم يشتكي: `non-primitive cast`. قرأت عن `#[repr(i32)]`، لكنني لست متأكدًا إذا كان هذا صحيحًا. وكيف أقوم بالتحويل العكسي؟ اكتبوا لي.