说我有方法foo
as:
def foo(i:Int):Option[Int] = ??? // some code
现在我想在一个Seq
of Int
如下:
Seq(1, 2).map{
case int => foo(int)
}.collect{
case Some(int) => int
}
结合这一点的一种方法是:
Seq(1, 2).collect{
case int if foo(int).isDefined => foo(int)
}
有什么办法可以避免打电话foo
twice?
所以基本上我想要foo(int)
在 LHS 上定义=>
作为准备在 RHS 上使用的变量,而不必再次计算它。
foo(int)
只存在于范围内if
, 所以不行。我认为这是不可能的。一般来说,我可能会使用类似于您使用的第一个代码块的东西map
and collect
, as foo
在该上下文中仅被调用一次。
在某些情况下,也可以完全重新表述问题。例如这里,可以使用以下命令来缩短flatMap
:
def foo(i: Int): Option[Int] = Option(i).filter(_ > 1)
scala> Seq(1, 2).flatMap(foo)
res0: Seq[Int] = List(2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)