Yapılar (Structs)
Demetler (tuples) gibi, yapılar (structs) da eşleştirme (matching) yoluyla çözümlenebilir (destructured):
struct Foo { x: (u32, u32), y: u32, } #[rustfmt::skip] fn main() { let foo = Foo { x: (1, 2), y: 3 }; match foo { Foo { y: 2, x: i } => println!("y = 2, x = {i:?}"), Foo { x: (1, b), y } => println!("x.0 = 1, b = {b}, y = {y}"), Foo { y, .. } => println!("y = {y}, diğer alanlar yoksayıldı"), } }
This slide should take about 4 minutes.
foo
’daki değişmez (literal) değerleri diğer desenlerle eşleşecek şekilde değiştirin.Foo
’ya yeni bir alan ekleyin ve desende gerektiği gibi değişiklikler yapın.
Daha Fazlasını Keşfedin
match &foo
’yu deneyin ve yakalanan (captures) değerlerin türünü kontrol edin. Desen sözdizimi aynı kalır, ancak yakalananlar paylaşılan referanslar (shared references) haline gelir. Bu eşleşme ergonomisidir (match ergonomics) ve bir enum üzerinde metotlar uygularkenmatch self
ile genellikle kullanışlıdır.- Aynı etki
match &mut foo
ile de meydana gelir: yakalanan (captures) değerler özel (exclusive) referanslar haline gelir.
- Aynı etki
- Bir yakalanan(capture) değer ile bir sabit (constant) ifade arasındaki ayrımı fark etmek zor olabilir. İlk koldaki
2
’yi bir değişken yapmayı deneyin ve çalışmadığını görün. Sonra o değişkeni birconst
olacak şekilde değiştirin ve tekrar çalıştığını görün.