scala – 总结两个选项
假设我有两个可选的Ints(都可以是Some或None):
val one : Option[Int] = Some(1) val two : Option[Int] = Some(2) 我的问题如下:有没有任何聪明的方法来使用Scalas精彩的收集方法来总结它们?我意识到我可以将它们合并到一个集合中,展平它并使用reduceLeftOption,如下所示: (one :: two :: Nil).flatten.reduceLeftOption(_ + _) // Some(3) 但是,上述解决方案意味着创建一个新的集合,并生活在一个富裕和发达的世界,从我可能沉浸其中的所有其他第一世界活动中抽出时间.对于像我们这样的程序员来说编程变得越来越奢侈的世界,必须有一个或多个豪华的第一世界答案,对吗? 编辑:所以要拼出来,这里有一些例子: 如果一个=一些(1)和两个=一些(2)我们应该有一些(3) 如果一个=某些(1)和两个=无我们应该有一些(1) 如果一个=无,两个=一些(2)我们应该有一些(2) 如果一个和两个都是None,我们应该有None,因为一个或两个都不能正确求和. 希望澄清的事情:-) 解决方法
强制性scalaz答案是使用scalaz选项monoid:
scala> one |+| two res0: Option[Int] = Some(3) 对于None,它会做你想要的事情: scala> two |+| None res1: Option[Int] = Some(2) scala> none[Int] |+| none[Int] res2: Option[Int] = None 没有方法是scalaz的一个方法,它有助于类型推断,因为没有返回None<:Option [Nothing]它返回一个Option [Int],有一个类似的方法来自Some,它返回任何给定的Option [A]而不是一些[A]: scala> 1.some |+| 2.some res3: Option[Int] = Some(3) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .NET Core利用skiasharp文字头像生成方法教程(基于docker发
- 不同机器互相调用WebService或者HTTP一定要telnet 测试
- AngularJS教程 AngularJS从0到1——AngularJS控制器
- angularjs – 如何使用Typescript将ui-router stateProvide
- docker – 如何使用gcloud或其他CLI在Google容器注册表中列
- 奇怪的gVIM内部边界
- Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
- Angular4-在线竞拍应用-组件间通信
- 斯卡拉 – 无形窄型损失
- Bootstrap学习(二)