Diğer işlevsel dillerden geliyor (ve Rust'un yeni üyesi olmak), Rust'un if let
sözdiziminin motivasyonu ile biraz şaşırdım. RFC "deyimsel test için çözümü bugün ve Option<T>
unwrapping", if let
olmadan yaRust neden `` sözdizimini verse?
match opt_val {
Some(x) => {
do_something_with(x);
}
None => {}
}
veya Scala yılında
if opt_val.is_some() {
let x = opt_val.unwrap();
do_something_with(x);
}
, tam olarak aynı şeyi mümkün olacağını olduğunu bahseder. Ancak, deyimsel çözüm, bir
Option
üzerinden
map
yerine (veya yalnızca'un yan etkisi içinse
foreach
) 'dir.
Yani benim soru: Neden Rust aynı şeyi bir deyimsel çözüm değildir: Çözümünüz ilk örneğe
if let
desugars tam oysa kaynaklarını kullanan bir kapatma, yaratır
opt_val.map(|x| do_something_with(x));
Not: Bu cevabı kabul ediyorum çünkü kısaca ana _technical_ farkını özetliyor, ama daha kapsamlı bir açıklama için @ Vladimir'in cevabına bakınız. – bluenote10