我想知道最好的方法是什么。
val foo = Some("a")
val bar = Some(2)
def baz(a: String, b: Int) = if((b % 2) == 0) Some(a+","+b) else None
(x zip y) flatMap baz //does not compile of course
(x zip y) flatMap { x => baz(x._1, x._2) } //ugly
我认为Odersky等人。在这个例子中,他们还有另一个技巧来降低噪音。
所以问题是如何在这里打击杂乱,假设你不允许改变baz
的实现(例如def baz(a: (String Int))
)。
答案 0 :(得分:17)
答案 1 :(得分:1)
彻底清除任何东西的最常见方法是使用模式或理解:
for ((a,b) <- (x zip y); c <- baz(a,b)) yield(c)