“???”是什么意思?在 Scala 中 lang 代表什么?
What does "???" stand for in Scala lang?
实际上,我有几个关于这个代码片段的问题:
- '???'导致此异常?
- 可以分配什么而不是'???' ?
- '???' 是什么意思代表什么?
object InfixTypesHard2 extends App {
val x0: Int --- String --- Boolean = ???
}
class ---[T, V](t: T, v: V)
堆栈跟踪:
Exception in thread "main" scala.NotImplementedError: an implementation is missing
at scala.Predef$.$qmark$qmark$qmark(Predef.scala:344)
at section3_OOP_operatorOverloading.InfixTypesHard2$.delayedEndpoint$section3_OOP_operatorOverloading$InfixTypesHard2(InfixTypesHard2.scala:5)
at section3_OOP_operatorOverloading.InfixTypesHard2$delayedInit$body.apply(InfixTypesHard2.scala:3)
at scala.Function0.apply$mcV$sp(Function0.scala:39)
at scala.Function0.apply$mcV$sp$(Function0.scala:39)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
at scala.App.$anonfun$main(App.scala:76)
at scala.App.$anonfun$main$adapted(App.scala:76)
at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:563)
at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:561)
at scala.collection.AbstractIterable.foreach(Iterable.scala:919)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at section3_OOP_operatorOverloading.InfixTypesHard2$.main(InfixTypesHard2.scala:3)
at section3_OOP_operatorOverloading.InfixTypesHard2.main(InfixTypesHard2.scala)
只是method in Predef
从语言的角度来看没有什么特别之处。
由于 you can see 实现只是抛出一个 new NotImplementedError
.
该方法的想法是,您可以将它用作“实现”任何方法的填充物,而花哨的名字的想法是它很容易被注意到因为这个想法是 ???
的任何使用都应该是临时的,以后再固定。
而如果你想知道为什么它可以用在任何地方,那是因为???
本身就是Nothing
类型;这是因为抛出异常的行为具有这种类型。由于 Nothing
是所有 类型 的 子类型 (也称为 底部类型) 由于 Liskov.
它总是可以使用
What could be assigned instead of '???' ?
类型的东西:Int --- String --- Boolean
;这只是一个奇怪的元组重新实现。
// For example:
new ---(new ---(1, "text"), false)
// Thanks to Jasper Moeys for providing the right syntax.
我想这是一些作业,不知道你在这里被要求做什么。
或者,该片段的整个想法是表明当类型具有两个类型参数时,您可以将类型用作中缀。
实际上,我有几个关于这个代码片段的问题:
- '???'导致此异常?
- 可以分配什么而不是'???' ?
- '???' 是什么意思代表什么?
object InfixTypesHard2 extends App {
val x0: Int --- String --- Boolean = ???
}
class ---[T, V](t: T, v: V)
堆栈跟踪:
Exception in thread "main" scala.NotImplementedError: an implementation is missing
at scala.Predef$.$qmark$qmark$qmark(Predef.scala:344)
at section3_OOP_operatorOverloading.InfixTypesHard2$.delayedEndpoint$section3_OOP_operatorOverloading$InfixTypesHard2(InfixTypesHard2.scala:5)
at section3_OOP_operatorOverloading.InfixTypesHard2$delayedInit$body.apply(InfixTypesHard2.scala:3)
at scala.Function0.apply$mcV$sp(Function0.scala:39)
at scala.Function0.apply$mcV$sp$(Function0.scala:39)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
at scala.App.$anonfun$main(App.scala:76)
at scala.App.$anonfun$main$adapted(App.scala:76)
at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:563)
at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:561)
at scala.collection.AbstractIterable.foreach(Iterable.scala:919)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at section3_OOP_operatorOverloading.InfixTypesHard2$.main(InfixTypesHard2.scala:3)
at section3_OOP_operatorOverloading.InfixTypesHard2.main(InfixTypesHard2.scala)
只是method in Predef
从语言的角度来看没有什么特别之处。
由于 you can see 实现只是抛出一个 new NotImplementedError
.
该方法的想法是,您可以将它用作“实现”任何方法的填充物,而花哨的名字的想法是它很容易被注意到因为这个想法是 ???
的任何使用都应该是临时的,以后再固定。
而如果你想知道为什么它可以用在任何地方,那是因为???
本身就是Nothing
类型;这是因为抛出异常的行为具有这种类型。由于 Nothing
是所有 类型 的 子类型 (也称为 底部类型) 由于 Liskov.
What could be assigned instead of '???' ?
类型的东西:Int --- String --- Boolean
;这只是一个奇怪的元组重新实现。
// For example:
new ---(new ---(1, "text"), false)
// Thanks to Jasper Moeys for providing the right syntax.
我想这是一些作业,不知道你在这里被要求做什么。
或者,该片段的整个想法是表明当类型具有两个类型参数时,您可以将类型用作中缀。