scala.Unit 和 () 不一样吗?
Is scala.Unit not same as ()?
我从 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???
我看到 list1
是 AnyVal
类型,而 list2
是 Any
类型,即使它们具有相同的数据(我假设)。
()
和Scala.Unit
不一样吗?我在这里错过了什么?
有 3 个不同的实体:
1) 输入scala.Unit
2) 对象 ()
- class scala.Unit
的唯一成员
3) 对象 scala.Unit
- 1)
的伴随对象。它是 class scala.Unit$
的成员 - 与 scala.Unit
.
不同
在你的第一个例子中 ()
代表 1)
,在第二个例子中 Unit
代表 3)
为了回答您的问题,()
是 scala.Unit
类型的值。而 scala.Unit
是伴生对象,所以它的类型是 Unit.type
.
查看下面的 REPL 代码:
scala> (): scala.Unit
// (): scala.Unit
scala> scala.Unit
// res1: Unit.type = object scala.Unit
底线是您传递给协变列表的任何对象都会找到值的公共类型。请参阅 Why doesn't the example compile, aka how does (co-, contra-, and in-) variance work?
中的讨论
如您所见,Integer
和 scala.Unit
的常见类型是 AnyVal
。 Intger
和Unit.type
的常见类型是Any
.
我从 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???
我看到 list1
是 AnyVal
类型,而 list2
是 Any
类型,即使它们具有相同的数据(我假设)。
()
和Scala.Unit
不一样吗?我在这里错过了什么?
有 3 个不同的实体:
1) 输入scala.Unit
2) 对象 ()
- class scala.Unit
3) 对象 scala.Unit
- 1)
的伴随对象。它是 class scala.Unit$
的成员 - 与 scala.Unit
.
在你的第一个例子中 ()
代表 1)
,在第二个例子中 Unit
代表 3)
为了回答您的问题,()
是 scala.Unit
类型的值。而 scala.Unit
是伴生对象,所以它的类型是 Unit.type
.
查看下面的 REPL 代码:
scala> (): scala.Unit
// (): scala.Unit
scala> scala.Unit
// res1: Unit.type = object scala.Unit
底线是您传递给协变列表的任何对象都会找到值的公共类型。请参阅 Why doesn't the example compile, aka how does (co-, contra-, and in-) variance work?
中的讨论如您所见,Integer
和 scala.Unit
的常见类型是 AnyVal
。 Intger
和Unit.type
的常见类型是Any
.