scala.Unit和()不一样吗?

Pun*_*y V 5 scala hierarchy

我从斯卡拉看到层次AnyVal是超级类型scala.Unit,Boolean,Char和其他Number类型.

scala> val list1 = List((),  1 ) 
list: List[AnyVal] = List((), 1)  // I see this is valid when compared with hierarchy tree.

scala> val list2 = List(Unit,  1 )
list: List[Any] = List(object scala.Unit, 1) // Why???
Run Code Online (Sandbox Code Playgroud)

我看到的list1是型AnyVal,其中作为list2是类型的Any,即使它们具有相同的数据(我假设).

()不是一样的Scala.Unit?我在这里错过了什么?

Ami*_*sad 5

要回答你的问题,()是类型的值scala.Unit.然而,scala.Unit是伴侣对象,所以它是类型Unit.type.

看看下面的REPL代码:

scala> (): scala.Unit
// (): scala.Unit

scala> scala.Unit
// res1: Unit.type = object scala.Unit
Run Code Online (Sandbox Code Playgroud)

底线是您传递给协变列表的任何对象都将找到值共有的类型.请参阅讨论为什么示例不编译,又如何(共同,反向和反向)方差有效?

当你发现的普通型Integerscala.UnitAnyVal.的普通型IntgerUnit.typeAny.