在scala中,Unit爲什麼是Anyval?這是什麼意思的語義?
Unit爲什麼是Anyval?這是什麼意思的語義?爲什麼不是Any或Anyref?
語義上的區別是什麼和這個選擇背後的理性是什麼。
中號
在scala中,Unit爲什麼是Anyval?這是什麼意思的語義?
Unit爲什麼是Anyval?這是什麼意思的語義?爲什麼不是Any或Anyref?
語義上的區別是什麼和這個選擇背後的理性是什麼。
中號
,很明顯描述成階文檔:
.. There is only one value of type Unit,
()
, and it is not represented by any object in the underlying runtime system. A method with return typeUnit
is analogous to a Java method which is declaredvoid
.
你不能有一個單位的變量值爲null
。
然而,單位可以在通常意義上被裝箱:
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
。
我不確定這是否合格,因爲它沒有提及Any,AnyVal或AnyRef? – adamnfish
這是之前的句子。爲了突出這一點1)'只有一個類型'2)'的值不由任何對象表示。這確實可以通過使單元擴展AnyVal來實現 – Rumoku