很难理解===在黄玉中的行为
1. scala> 1.some === Some(1)
res33: Boolean = true
2. scala> Some(1) === 1.some
<console>:14: error: value === is not a member of Some[Int]
Some(1) === 1.some
^
3. scala> (Some(1):Option[Int]) === 1.some
res35: Boolean = true我能理解(1),甚至(2)也会给出同样的结果。
在(3)中,我不得不投出一些选项才能得到结果。
我查看了scalaz的源代码,但没有得到它。
请解释一下。
Scalaz版本= 7.1.0
Scala版本= 2.11.2
发布于 2015-01-27 12:35:55
Some(1)返回的是Some[Int]而不是Option[Int];.some的全部目的是返回Option[Int],以更好地与Option[Int]风格兼容。Scalaz是为基于ADT的非子类型编程风格编写的,而大多数scalaz类型类型对子类型的支持很少(特别是,它们通常是不变的;这通常会改进类型推断,并且在用户出错时意味着更好的错误消息,但代价是对子类型的支持更差)。如果您大量使用scalaz,您可能会发现一直使用scalaz风格的“智能构造函数”(如.some )是最容易的。
https://stackoverflow.com/questions/28169675
复制相似问题