scala - 我如何才能扭转期权莫纳德的潮流?

标签 scala scala-option

说,我有一堆“验证”函数,如果没有错误,则返回None,否则返回指定错误消息的Some(String)。类似于以下内容...

def validate1:Option[String] 
def validate2:Option[String]
def validate3:Option[String]

我将按顺序调用它们,并且一旦返回Some(String),我就会停止并返回相同的值。如果返回None,我将继续执行下一个操作,直到序列结束。如果所有这些都返回None,我将返回None。

我想将它们粘合在一起以“表达”。就像是 ...
for( a <- validate1; b <- validate2; c <- validate3) yield None;

但是,Option的流动恰恰与我在这里想要的相反。它在None处停止,然后跟随Some(String)。

我该如何实现这样的目标?

最佳答案

您可以将这些调用与Option上的或Else 方法链接在一起

validate1 orElse validate2 orElse validate3

或者您可以折算成一组转换为函数的验证方法
val vlist= List(validate1 _, validate2 _, validate3 _)

vlist.foldLeft(None: Option[String]) {(a, b) => if (a == None) b() else a}

关于scala - 我如何才能扭转期权莫纳德的潮流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184152/

相关文章:

scala - 为什么 Option 的 orNull 方法有这个多余的隐式参数?

Scala:具有两个或多个选项的映射

scala - 在 Scala 中处理两个选项

Scala:类似 Option (Some, None) 但具有三种状态:Some、None、Unknown

html - 使用公共(public)文件夹中的图像

scala - 如何从 Scala 集合中的索引获取选项?

java - 简单的 Java/Scala 文件复制,以缓冲区/缓冲区大小作为参数

function - 这是成语 Scala.使用 def 来缩短语句?

scala - Akka 中的询问模式

scala - json4s 序列化和反序列化泛型类型