2015-11-03 98 views

回答

0

,很明顯描述成階文檔:

.. 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 type Unit is analogous to a Java method which is declared void .

+1

我不確定這是否合格,因爲它沒有提及Any,AnyVal或AnyRef? – adamnfish

+0

這是之前的句子。爲了突出這一點1)'只有一個類型'2)'的值不由任何對象表示。這確實可以通過使單元擴展AnyVal來實現 – Rumoku

3

你不能有一個單位的變量值爲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.TYPEVoid.TYPE

+0

這與Any,AnyRef或AnyVal有什麼關係?很明顯,單位必須是底部類型,但爲什麼*那​​個*? – adamnfish

+1

@adamnfish單位不是什麼底部。它就像Int,除了它只有一個值'()'。它不能有'null'作爲值(比如Int不能爲null),所以它不能是超類型的'Null'。 'typeOf [Nothing] <:

+0

那麼AnyVal和AnyRef的區別是什麼?只有其中一個可以被禁止? – adamnfish