我最近在Scala遇到了一个令人困惑的问题.我希望得到以下代码None,但结果是Some(null):
Option("a").map(_ => null)
Run Code Online (Sandbox Code Playgroud)
这背后的原因是什么?为什么不导致None?
注意:这个问题不是为什么有些(null)不被视为无重复?,因为问题要求明确使用Some(null).我的问题是关于使用Option.map.
每次我们为规则添加例外时,我们都会剥夺自己推理代码的工具.
映射Some总是评估为a Some.这是一个简单而有用的法律.如果我们要提出改变建议,我们将不再拥有该法律.例如,我们可以肯定地说这是一件事.对于所有的f,x以及y:
Some(x).map(f).map(_ => y) == Some(y)
Run Code Online (Sandbox Code Playgroud)
如果我们要提出你提出的改变,那么这个陈述将不再是真实的; 具体而言,它不适用于哪些情况f(x) == null.
而且,Option是一个算子.Functor是对具有map函数的事物的有用概括,并且它具有与关于映射应如何工作的直觉很好地对应的规律.如果我们要做出你提出的改变,Option那就不再是一个仿函数了.
nullScala中的一种异常现象仅存在于与Java库的互操作性.抛弃Option作为仿函数的有效性并不是一个好理由.
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |