scala – 如何反转Option Monad的流量?
发布时间:2020-12-16 09:03:18 所属栏目:安全 来源:网络整理
导读:比方说,我有一堆“验证”函数,如果没有错误则返回None,否则返回Some(String)指定错误消息.像下面这样的东西…… def validate1:Option[String] def validate2:Option[String]def validate3:Option[String] 我将按顺序调用它们,一旦返回Some(String),我就会停
比方说,我有一堆“验证”函数,如果没有错误则返回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上使用orElse方法将调用链接在一起
validate1 orElse validate2 orElse validate3 或者你可以在转换为函数的验证方法集合上运行折叠 val vlist= List(validate1 _,validate2 _,validate3 _) vlist.foldLeft(None: Option[String]) {(a,b) => if (a == None) b() else a} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容