gpt4 book ai didi

scala - Scala 中的 '???' 是什么?

转载 作者:行者123 更新时间:2023-12-04 17:15:53 26 4
gpt4 key购买 nike

我在学习 Scala使用 IntelliJ IDE。

当我订阅类(class) Element并覆盖 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
}

数组元素
class ArrayElement(cont: Array[String]) extends Element {
override def contents: Array[String] = ??? // impl provided by IDE
}

我在运行程序时看不到任何问题,但是当我访问该方法时,我得到以下异常
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)

谁能解释一下 ??? 是什么?和使用它?

最佳答案

???被设计为占位符,是在 Predef 中定义的方法(默认自动导入)

它的定义是
def ??? : Nothing = throw new NotImplementedError
所以它有返回类型 Nothing它所做的只是抛出NotImplementedError .此定义允许它用作您定义但尚未实现但仍希望能够编译您的程序的方法的占位符实现。
Nothing是每个类型的子类型,这使得 ???无论预期什么类型,都是一个有效的实现。

关于scala - Scala 中的 '???' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47717583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com