Avatar ·

هل يستحق تنفيذ trait Deref للأنواع الجديدة (newtypes) في Rust؟

مرحباً بالجميع! لقد بدأت مؤخراً في تعلم Rust وواجهت سؤالاً مثيراً للاهتمام حول تصميم الكود. غالباً ما أقوم بإنشاء أغلفة (wrappers) للأنواع الموجودة لإضافة دلالات أو تقييد الوظائف. على سبيل المثال، لدي نوع `UserId` الذي يخزن داخلياً `u64`: ```rust struct UserId(u64); ``` أريد أن يكون العمل مع `UserId` مشابهاً للعمل مع `u64` (المقارنة، الطباعة، النسخ). يمكنني بالطبع تنفيذ trait `Display` أو `PartialEq` يدوياً، لكن هذا يتطلب الكثير من الكود. ومع ذلك، صادفت نمطاً برمجياً حيث يتم تنفيذ trait `Deref` لهذه الأنواع الجديدة: ```rust use std::ops::Deref; impl Deref for UserId { type Target = u64; fn deref(&self) -> &u64 { &self.0 } } ``` الآن يمكنني استدعاء دوال `u64` مباشرة على `UserId`، وهو