[英]Options in scala
我正在尝试编写一个函数,该函数将一个位置列表和一个函数(将其放置并生成可选路径)作为参数。
所以我需要找到f的结果不是None(如果有)的第一个位置。 除了函数的类型,我们实际上不需要知道任何其他信息。 但是,我们需要计算f(x)的结果是什么(仅一次)
所以从本质上讲,这就是我要编写的方法:
xs.view.map(f(_)).find(_.isDefined)
如果您喜欢(尾)递归:
case class Pos(value: Int)
case class Path(value: Int)
@scala.annotation.tailrec
def first(xs: List[Pos], f: Pos => Option[Path]) : Option[Path] = xs match {
case Nil => None
case p :: res => f(p) match {
case None => first(res, f)
case r => r
}
}
val list = List(Pos(1), Pos(2))
def f(p: Pos): Option[Path] =
if(p.value == 2) Option(Path(2)) else None
println(first(list, f)) // prints "Some(Path(2))"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.