在scala中,
为什么Unit是Anyval?它在语义上意味着什么?为什么不是Any或Anyref?
在语义上有什么不同,这个选择背后的理性是什么。
中号
答案 0 :(得分:3)
您不能拥有值为null
的单位变量。
但是,Unit可以按照通常的意义装箱:
scala> def f[A](a: A) = 42
f: [A](a: A)Int
scala> f(())
res0: Int = 42
scala> :javap -pv -
[snip]
12: getstatic #41 // Field scala/runtime/BoxedUnit.UNIT:Lscala/runtime/BoxedUnit;
15: invokevirtual #45 // Method $line3/$read$$iw$$iw$.f:(Ljava/lang/Object;)I
类似地,
scala> var x: Unit = _
x: Unit = ()
真的是BoxedUnit.UNIT
。
“未装箱”类型BoxedUnit.TYPE
为Void.TYPE
。
答案 1 :(得分:0)
scala docs中描述的很清楚:
..只有一个类型为Unit
()
的值,并且它不由底层运行时系统中的任何对象表示。返回类型为Unit
的方法类似于声明为void
的Java方法。