【问题标题】:Can this be null in Scala?这可以在 Scala 中为空吗?
【发布时间】:2012-04-09 11:41:18
【问题描述】:

我刚刚阅读了this question 并偶然发现了以下引用:

Scala 将== 视为在类Any 中定义如下:

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

(null eq this) 部分让我想知道:真的可以在空指针上调用方法吗? this 可以在 Scala 中成为 null 吗?

【问题讨论】:

  • 您将抽象与实现混淆了。抽象地,可以调用null 上的方法,例如==。显然,JVM 上的实现不会调用空指针上的方法。

标签: scala null this


【解决方案1】:

查看Scala language specification,即6.3 The Null Value章节:

空值的类型为scala.Null,因此与每个引用都兼容 类型。它表示一个引用值,它引用一个特殊的 “null” 对象。这个对象 实现类scala.AnyRef中的方法如下:

• 如果参数x 也是“null”对象,则eq(x)==(x) 返回true。

• 如果参数x 不是“null”对象,则ne(x)!=(x) 返回true。

这意味着,当您将某些内容与 null 文字或 null 文字进行比较时,您实际上指的是特殊 scala.Null 类的方法。将 null 文字视为该类的简写。

当然在实现层面它是优化的,普通使用null

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我对 Scala 还是很陌生,但我认为这是可能的唯一方法是因为“null”本身是 Null 的一个实例,而不是像 Java 中的“null”这样的特殊值。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-20
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多