Mam blok kodu, w którym wiele zmiennych opcjonalnych musi być przypisanych jednocześnie. Istnieje bardzo mała szansa, że któraś z wartości będzie None
, więc indywidualne przekazanie każdej nieudanej sprawy nie jest szczególnie użyteczne.Jak grupować zadania "Opcji" w Rust?
Obecnie piszę kontrole tak:
if let Some(a) = foo_a() {
if let Some(b) = foo_b() {
if let Some(c) = foo_c() {
if let Some(d) = foo_d() {
// code
}
}
}
}
Byłoby wygodne, jeśli to było możliwe do zadań grupowych. Bez tego, dodanie nowego bloku wcięcia zmiennej o jeden poziom, co dla hałaśliwych dyferencjału i niepotrzebnie powoduje głębokie wcięcie:
if let Some(a) = foo_a() &&
let Some(b) = foo_b() &&
let Some(c) = foo_c() &&
let Some(d) = foo_d()
{
// code
}
Czy istnieje sposób, aby przypisać wiele Option
sw jednym if?
Niektóre szczegóły warto zauważyć:
Pierwszą funkcją, która nie powinna zwarcie i nie nazywać innych. W przeciwnym razie może to być napisane tak:
if let (Some(a), Some(b), Some(c), Some(d)) = (foo_a(), foo_b(), foo_c(), foo_d()) {
// Code
}
Głębokie wcięcie można uniknąć stosując funkcję, ale wolałbym tego nie robić, ponieważ może nie chcieć mieć ciało w różnym zakresie ...
byłem dosłownie zamiar [umieścić to jako odpowiedź] (https: //play.rust-lang .org /? gist = 19b24cb31e915860916a99f41347b727 & version = stable + backtrace = 0), dopóki nie zauważyłem twojej edycji, która zawierała zwarcie. Nie sądzę, że możliwe jest zwarcie wielu wiązań 'if let'. Istnieje [jednak otwarty dokument RFC] (https://github.com/rust-lang/rfcs/issues/929). –
@SimonWhitehead, dziękuję bez wyjątku, dodano go do pytania w celu wyjaśnienia - ponieważ może być przydatny w niektórych sytuacjach. – ideasman42