我经常遇到一个模式,所以我想知道 Scala 库中是否有任何方便的方法。
让它成为一个函数f: A => Option[B]
。我想做一个以f
开始的循环调用x
,f(f(f(x).get).get...)
直到f
返回None
并保留最后一个非None
值。
我为此编写了一个实现:
@tailrec
def recurrentCallUntilNone[B](f: B => Option[B], x: B): B = f(x) match {
case Some(y) => recurrentCallUntilNone(f, y)
case None => x
}
这已经在标准库中实现了吗?
一个使用示例可能是保持当前位置的列表(拉链)。通过调用next
,None
如果当前位置之后没有元素或Option
同一个列表没有元素,则返回,但当前位置递增。通过使用上述方法,end
可以构造一个将列表查找到末尾的方法。