什么是 '???' 在斯卡拉?

Sar*_*ana 5 scala intellij-idea

我正在学习Scala使用IntelliJIDE.

当我使用class Element和override contents方法时,IDE为contents带有定义的方法提供了默认实现???

下面是本书的代码 Programming in Scala, 3rd edition

元件

abstract class Element {
  def contents: Array[String]

  def height = contents.length

  def width = if (height == 0) 0 else contents(0).length
}
Run Code Online (Sandbox Code Playgroud)

ArrayElement

class ArrayElement(cont: Array[String]) extends Element {
  override def contents: Array[String] = ??? // impl provided by IDE
}
Run Code Online (Sandbox Code Playgroud)

我没有看到运行程序有任何问题,但是当我访问该方法时,我得到了异常

Exception in thread "main" scala.NotImplementedError: an implementation is missing
    at scala.Predef$.$qmark$qmark$qmark(Predef.scala:284)
    at org.saravana.scala.ArrayElement.contents(ScalaTest.scala:65)
Run Code Online (Sandbox Code Playgroud)

有人可以解释???它的用途和用途吗?

puh*_*len 10

???被设计为占位符,是一个定义的方法Predef(默认情况下会自动导入)

它的定义是

def ??? : Nothing = throw new NotImplementedError

所以它有返回类型Nothing,它只是抛出NotImplementedError.此定义允许它用作您定义但尚未实现但仍希望能够编译程序的方法的占位符实现.

Nothing是每种类型的子类型,???无论期望什么类型,它都会生成有效的实现.