可这是空的Scala呢?(Can this be null in Scala?)

2019-09-16 10:39发布

我刚才读了这个问题 ,并偶然发现了以下报价:

斯卡拉对待== ,如果它被定义为类以下Any

 final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that) 

(null eq this)部分使我想知道:它实际上是可以调用的空指针的方法呢? 可thisnull的Scala呢?

Answer 1:

退房Scala语言规范 ,即6.3 NULL值章:

空值是类型的scala.Null ,并且因此与每个引用类型兼容。 它表示这是指一种特殊的“空”对象的引用值。 这个对象实现了类方法scala.AnyRef如下:

eq(x)==(x)如果参数返回true x也是“空”的对象。

ne(x)!=(x)如果参数返回true x是不是也该“空”的对象。

这意味着,在语义上比较时,与一些null文本或null的东西你实际上指的是一种特殊的方法字面scala.Null类。 把null作为该类的简写文字。

当然,在执行层面也进行了优化和普通的 null时使用。



Answer 2:

null是唯一的实例Null类,这是一个有效的对象。 Null是所有引用类型的子类型。



Answer 3:

我是很新,斯卡拉,但唯一的办法,我认为这是可能的存在是由于这样的事实,即“空”本身是空的实例,而不是完全像在Java中“零”的特殊值。

http://blog.sanaulla.info/2009/07/12/nothingness/

这篇文章帮助我理解这一点更好。



文章来源: Can this be null in Scala?
标签: scala null this