ساختار‌ تاپل‌ها

اگر نام فیلدها بی‌اهمیت هستند، می‌توانید از ساختار tuple استفاده کنید:

struct Point(i32, i32);

fn main() {
    let p = Point(17, 23);
    println!("({}, {})", p.0, p.1);
}

این اغلب برایsingle-field wrapper (که newtypes نامیده می‌شوند) استفاده می‌شود:

struct PoundsOfForce(f64);
struct Newtons(f64);

fn compute_thruster_force() -> PoundsOfForce {
    todo!("از یک دانشمند حوزه موشک در ناسا بپرس")
}

fn set_thruster_force(force: Newtons) {
    // ...
}

fn main() {
    let force = compute_thruster_force();
    set_thruster_force(force);
}
This slide should take about 10 minutes.
  • Newtypes یک راه مناسب برای رمزگذاری اطلاعات اضافی در مورد مقدار در یک نوع اولیه (primitive type) است، به عنوان مثال:
    • این عدد در برخی واحدها اندازه گیری می‌شود: Newtons در مثال بالا.
    • مقدار زمانی که ایجاد شد مقداری اعتبارسنجی را دریافت کرد، بنابراین دیگر لازم نیست در هر بار استفاده دوباره آن را تأیید کنید: PhoneNumber(String) یا OddNumber(u32).
  • نحوه افزودن مقدار f64 به نوع Newtons را با دسترسی به single field در نوع جدید نشان دهید.
    • Rust معمولاً چیزهای غیر واضح را دوست ندارد، مانند automatic unwrapping یا به‌عنوان‌مثال استفاده از booleanها به عنوان اعداد صحیح.
    • مبحث Operator overloading در روز سوم مورد بحث قرار می گیرد (generics).
  • این مثال، اشاره ظریفی به شکست مدارگَرد آب‌و‌هوای مریخ است.