Kann ich im folgenden Beispielprogramm vermeiden, map2
definieren zu müssen?Gibt es eine Möglichkeit, zwei Optionen zu "kombinieren"?
fn map2<T, U, V, F: Fn(T, U) -> V>(f: F, a: Option<T>, b: Option<U>) -> Option<V> {
match a {
Some(x) => match b {
Some(y) => Some(f(x, y)),
None => None,
},
None => None,
}
}
fn main() {
let a = Some(5);
let b = Some(10);
let f = |a, b| {
a + b
};
let res = map2(f, a, b);
println!("{:?}", res);
// prints Some(15)
}
Für Menschen, die auch Haskell sprechen, ich denke, diese Frage auch formuliert werden könnte, „Gibt es ein Werkzeug, das wir statt liftM2 in Rust verwenden kann?“
Danke, das ist eigentlich eine ziemlich gute Lösung, wenn Sie nur brauchen um dies ein- oder zweimal zu machen. Wahrscheinlich lohnt es sich aber trotzdem, die Funktion in einigen Fällen zu definieren. –