ساختارها

مانند tuple ها، ساختار را نیز می توان با تطبیق تخریب کرد:

struct Foo {
    x: (u32, u32),
    y: u32,
}

#[rustfmt::skip]
fn main() {
    let foo = Foo { x: (1, 2), y: 3 };
    match foo {
        Foo { x: (1, b), y } => println!("x.0 = 1, b = {b}, y = {y}"),
        Foo { y: 2, x: i }   => println!("y = 2, x = {i:?}"),
        Foo { y, .. }        => println!("در y = {y} ، سایر فیلدها نادیده گرفته شدند"),
    }
}
This slide should take about 4 minutes.
  • تغییر مقادیر لیترال در foo برای مطابقت با سایر الگوها.
  • اضافه کردن یک فیلد جدید به Foo و ایجاد تغییرات مورد نیاز.
  • تشخیص تفاوت بین یک گرفتن متغییر و یک عبارت ثابت می‌تواند دشوار باشد. سعی کنید ‍2 را در شاخه دوم به یک متغیر تغییر دهید و خواهید دید که کار نمی‌کند. آن را به یک const تغییر دهید و خواهید دید که دوباره کار می‌کند.