作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 ruby 中可以这样做:
first ||= number
和first只有当number为nil时才会获取number的值
如何在 Scala 中做类似的事情?
到目前为止,我已经想到了这个,但它看起来不像在 ruby 中那么好。
var first: Option[Int] = None
...
first = if (first == None) Option(number) else first
// or
first = Some(first.getOrElse(number))
最佳答案
有一个 scalaz
运算符:
import scalaz._, Scalaz._
none[Int] <+> 1.some
// Some(1)
2.some <+> 1.some
// Some(2)
你可以使用 a <+>= b
而不是 a = a <+> b
:
var i = none[Int] // i == None
i <+>= 1.some // i == Some(1)
i <+>= 2.some // i == Some(1)
另请参阅 scalaz cheatsheet 中的 Plus[F[_]] .
对于 Option
plus
是implemented作为orElse
.
对于集合( List
、 Vector
、 Stream
等) Plus
实现为 append
:
Vector(1, 2) <+> Vector(3, 4)
// Vector(1, 2, 3, 4)
我找不到合并Option[T]
的方法和 T
按照你想要的方式,但你可以这样写这样的方法:
implicit class PlusT[T, M[_]: Plus : Applicative](m: M[T]) {
def ?+?(t: T) = m <+> t.point[M]
}
none[Int] ?+? 1
// Some(1)
2.some ?+? 1
// Some(2)
var i = none[Int] // i == None
i ?+?= 1 // i == Some(1)
i ?+?= 2 // i == Some(1)
您可以将此方法重命名为 ||
并像||=
一样使用它就像在Ruby
,但这个名称可能会让其他开发人员感到困惑 - 已经有方法 ||
对于 Boolean
.
关于ruby - 如何仅在选项为 None 时分配给选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20919444/
我是一名优秀的程序员,十分优秀!