繁体   English   中英

Scala中的选项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM