Mam niektóre kodu, który wygląda tak:Czy istnieje niepoprawny sposób łączenia wyników funkcji, które zwracają wartości opcji?
f(a).and_then(|b| {
g(b).and_then(|c| {
h(c).map(|d| {
do_something_with(a, b, c, d)
})
})
})
Gdzie f
, g
i h
powrotną Option
wartości. Muszę użyć wszystkich wartości pośrednich (a
, b
, c
i d
) w obliczeniach do_something_with
. Wcięcie jest bardzo głębokie. Czy jest lepszy sposób to zrobić? Idealnie byłoby to wyglądać mniej więcej tak (co oczywiście nie działa):
try {
let b = f(a);
let c = g(b);
let d = h(c);
do_something_with(a, b, c, d)
} rescue NonexistentValueException {
None
}
zrobić wszystkie funkcje zwracają ten sam typ opcji? czy zmieniają typ? –
w przypadku, gdy są: oto rozwiązanie wolne od makr: http://is.gd/eItCTh Jakiekolwiek inne rozwiązania wymagają generycznych wartości lub generałów variadic lub jakiejś cechy, na przykład [FixedSizeArray] (https://doc.rust-lang.org /nightly/core/array/trait.FixedSizeArray.html) tylko dla krotek –