为什么Unit是Anyval?它在语义上意味着什么?

时间:2015-11-03 17:47:42

标签: scala

在scala中,

为什么Unit是Anyval?它在语义上意味着什么?为什么不是Any或Anyref?

在语义上有什么不同,这个选择背后的理性是什么。

中号

2 个答案:

答案 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.TYPEVoid.TYPE

答案 1 :(得分:0)

scala docs中描述的很清楚:

  

..只有一个类型为Unit ()的值,并且它不由底层运行时系统中的任何对象表示。返回类型为Unit的方法类似于声明为void的Java方法。