Scala中用户定义对象的类型


在Scala中,Nil实际上是一个返回空List的对象。当我键入"无"时,它会打印以下内容。
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类型"。NilSample共享在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.type0,或者Nil,在我们的例子中,它表示空列表的情况。

在Scala中,Nil实际上是一个返回空List的对象。

否,Nil是一个表示空列表的对象(通过从list[Nothing]扩展(。看见https://alvinalexander.com/scala/what-is-difference-between-nil-empty-list-in-scala/

相关内容

  • 没有找到相关文章

最新更新