说,我有一堆“验证”函数,如果没有错误,则返回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/