Pochodzę z innych języków funkcyjnych (i będąc nowicjuszem Rusta), jestem nieco zaskoczony motywacją składni Rusta if let
. RFC wspomina, że bez if let
, w „idiomatycznym rozwiązanie dzisiaj dla testowania i rozpakowaniu się Option<T>
” jest alboDlaczego Rust potrzebuje składni `if let`?
match opt_val {
Some(x) => {
do_something_with(x);
}
None => {}
}
lub
if opt_val.is_some() {
let x = opt_val.unwrap();
do_something_with(x);
}
W Scala, byłoby możliwe, aby zrobić dokładnie to samo. Ale rozwiązanie idiomatyczne to raczej map
niż Option
(lub foreach
, jeśli jest to tylko efekt uboczny z doing_something_with(x)
).
Więc moje pytanie brzmi: Dlaczego nie jest to, że jest to rozwiązanie idiomatyczne zrobić to samo w Rust:
opt_val.map(|x| do_something_with(x));
Uwaga: akceptuję tę odpowiedź, ponieważ krótko podsumowuje ona główną różnicę techniczną, ale patrz odpowiedź @ Vladimira na bardziej wyczerpujące wyjaśnienie. – bluenote10