دیتا تایپهای Generic
میتوانید از generic ها برای انتزاع نوع فیلد مشخص استفاده کنید:
#[derive(Debug)]
struct Point<T> {
x: T,
y: T,
}
impl<T> Point<T> {
fn coords(&self) -> (&T, &T) {
(&self.x, &self.y)
}
fn set_x(&mut self, x: T) {
self.x = x;
}
}
fn main() {
let integer = Point { x: 5, y: 10 };
let float = Point { x: 1.0, y: 4.0 };
println!("{integer:?} و {float:?}");
println!("coords: {:?}", integer.coords());
}
This slide should take about 10 minutes.
-
سوال: چرا
Tدر عبارت{}<impl<T> Point<Tدوبار مشخص شده است؟ آیا این تکراری نیست؟- این به این دلیل است که این یک بخش پیادهسازی generic برای تایپ generic است. آنها بهطور مستقل generic هستند.
- این به این معناست که این متدها برای هر نوع
Tتعریف شدهاند. - این امکان وجود دارد که
{ .. }<impl Point<u32را بنویسید.Pointهنوز هم generic است و میتوانید از<Point<f64استفاده کنید، اما متدهای موجود در این بلوک تنها برای<Point<u32در دسترس خواهند بود.
-
سعی کنید یک متغیر جدید با
let p = Point { x: 5, y: 10.0 };بسازید. کد را بهروزرسانی کنید تا نقاطی که دارای عناصر با تایپهای مختلف هستند را مجاز کند، با استفاده از دو تایپ متغیر، مانندTوU.