我有以下的Scala代码:
def f(x: Int, y: Int): Option[String] = x*y match {
case 0 => None
case n => Some(n.toString)
}
val data = List((0, 1), (1, 0), (2, 3), (4, -1))
data flatMap {case (x, y) => f(x, y)}
但是,最后一行太啰嗦了,所以我尝试了所有这些方案,但都没有编译通过。
data flatMap f
data flatMap f.tupled
data flatMap Function.tupled(f)
data flatMap {f _}
data flatMap (f _).tupled
data flatMap f(_)
我做错了什么?唯一有效的方法是:
(data map Function.tupled(f)).flatten
我认为 map
后面跟着 flatten
总是可以替换成 flatMap
,但尽管上述代码可以编译通过,下面这行却不行:
data flatMap Function.tupled(f)
data collect unlift(tupled(f))
在这里更有意义。谢谢! - pathikrit