我刚才读了这个问题 ,并偶然发现了以下报价:
斯卡拉对待
==
,如果它被定义为类以下Any
:final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
该(null eq this)
部分使我想知道:它实际上是可以调用的空指针的方法呢? 可this
是null
的Scala呢?
我刚才读了这个问题 ,并偶然发现了以下报价:
斯卡拉对待
==
,如果它被定义为类以下Any
:final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
该(null eq this)
部分使我想知道:它实际上是可以调用的空指针的方法呢? 可this
是null
的Scala呢?
退房Scala语言规范 ,即6.3 NULL值章:
空值是类型的
scala.Null
,并且因此与每个引用类型兼容。 它表示这是指一种特殊的“空”对象的引用值。 这个对象实现了类方法scala.AnyRef
如下:•
eq(x)
和==(x)
如果参数返回truex
也是“空”的对象。•
ne(x)
和!=(x)
如果参数返回truex
是不是也该“空”的对象。
这意味着,在语义上比较时,与一些null
文本或null
的东西你实际上指的是一种特殊的方法字面scala.Null
类。 把null
作为该类的简写文字。
当然,在执行层面也进行了优化和普通的 null
时使用。
null
是唯一的实例Null
类,这是一个有效的对象。 Null
是所有引用类型的子类型。
我是很新,斯卡拉,但唯一的办法,我认为这是可能的存在是由于这样的事实,即“空”本身是空的实例,而不是完全像在Java中“零”的特殊值。
http://blog.sanaulla.info/2009/07/12/nothingness/
这篇文章帮助我理解这一点更好。