如何实现回退功能列表

假设我有一个返回的函数列表,Option[Int]我想返回第一个返回的结果Some(…),而不是计算它之后的其余函数。例如:

val list = List(
  () => { println("a"); None },
  () => { println("b"); Some(1) },
  () => { println("c"); Some(2) },
  () => { println("d"); None }
)

在这种情况下,结果将是Some(1),并且它只会打印ab(因为其余的都没有计算)。

我的解决方案是

list.foldLeft(Option.empty[Int]) { (a, b) => a orElse b() }

问题是否有更优雅/简洁的方法,或者一些图书馆?

回答

list.view.flatMap(_()).headOption

a并且b只被调用一次。c并且d永远不会被调用甚至迭代。None如果没有Some()值则返回。

.view如果将不需要list为类型LazyList


以上是如何实现回退功能列表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>