我从斯卡拉看到层次即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?我在这里错过了什么?
要回答你的问题,()是类型的值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)
底线是您传递给协变列表的任何对象都将找到值共有的类型.请参阅讨论为什么示例不编译,又如何(共同,反向和反向)方差有效?
当你发现的普通型Integer和scala.Unit为AnyVal.的普通型Intger和Unit.type是Any.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |