加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读