res24: scala.collection.immutable.Nil.type = List()
res24是类型为CCD_ 1的变量。我不太懂最后一首"type"。它在哪里?
另一个问题是:Nil返回一个空列表。我们怎样才能写出一个返回一些东西的对象呢?我在下面试过;它没有返回我所期望的整数值。
object Sample { 123 }
val x = Sample
x: Sample.type = Sample$@36fe7b03
提前感谢!
我不太理解最后一段"type"。它的位置?
这就是Scala所说的"Singleton类型"。Nil
和Sample
共享在Scala中作为对象的共同特性,这意味着它们是具有单个实例的类(假设它是顶级声明,而不是嵌套在给定包范围内的class
中(。它是类型定义的一部分,但在声明站点中不可见。有关singleton类型用法的更多信息,请参阅什么是singleton类型?
我们如何编写一个返回某些内容的对象?
编写一个返回值的object
类似于询问"我可以创建一个在实例化时返回值的类吗?">。object
是singleton,可以在其上有返回值的方法:
object Bar {
def x(): Int = 42
}
def main(args: Array[String]): Unit = print(Bar.x())
得到CCD_ 7。
编辑
我仍然不清楚singleton对象Nil是如何返回空的列出
如果我们能够简化并模仿List[A]
的定义,我们将看到:
sealed trait List[+A]
case class ::(head: A, tail: List[A]) extends List[A]
case object Nil extends List[Nothing]
我们这里有一个代数数据类型(ADT(,更具体地说是一个求和类型,它是一个由多个可能值组成的类型。这里,List[A]
可以是或者scala.collection.immutable.Nil.type
0,或者Nil
,在我们的例子中,它表示空列表的情况。
否,Nil是一个表示空列表的对象(通过从list[Nothing]扩展(。看见https://alvinalexander.com/scala/what-is-difference-between-nil-empty-list-in-scala/