首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一些Scalaz ===

一些Scalaz ===
EN

Stack Overflow用户
提问于 2015-01-27 11:43:15
回答 1查看 160关注 0票数 3

很难理解===在黄玉中的行为

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-27 12:35:55

Some(1)返回的是Some[Int]而不是Option[Int].some的全部目的是返回Option[Int],以更好地与Option[Int]风格兼容。Scalaz是为基于ADT的非子类型编程风格编写的,而大多数scalaz类型类型对子类型的支持很少(特别是,它们通常是不变的;这通常会改进类型推断,并且在用户出错时意味着更好的错误消息,但代价是对子类型的支持更差)。如果您大量使用scalaz,您可能会发现一直使用scalaz风格的“智能构造函数”(如.some )是最容易的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28169675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档