次のサンプルプログラムでは、map2
を定義することを避ける方法はありますか?また、Haskellのを話す人々のため2つのオプションを「結合」する方法はありますか?
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)
}
、私は、この質問はまた言うこともできたと思います「私たちはルーストにliftM2の代わりに使用することができます任意のツールはありますか?」
おかげで、それは実際にあなただけ必要なときのためにかなり良い解決策ですこれを1回または2回行う。しかし、場合によっては関数を定義する価値があるかもしれません。 –