Unit
被指定爲的AnyVal
(其唯一的價值是()
)亞型,那麼,爲什麼這是可能的:爲什麼單位陣列可以保持爲空?
scala> val units = new Array[Unit](5)
units: Array[Unit] = Array(null, null, null, null, null)
是在REPL的陣列式打印機制這只是一個錯誤/遺漏還是有原因呢?
Unit
被指定爲的AnyVal
(其唯一的價值是()
)亞型,那麼,爲什麼這是可能的:爲什麼單位陣列可以保持爲空?
scala> val units = new Array[Unit](5)
units: Array[Unit] = Array(null, null, null, null, null)
是在REPL的陣列式打印機制這只是一個錯誤/遺漏還是有原因呢?
它被固定爲斯卡拉2.9和現在的打印效果:
scala> val units = new Array[Unit](5)
units: Array[Unit] = Array((),(),(),(),())
我認爲這是數組初始化的問題/限制。對於原始值,數組被初始化爲它們的缺省值,我由JVM通過利用本地數組的Scala數組假定它。
對於其他類型,該值將被包裝到一個對象中,看起來它們初始化爲null。
如果你想要一個單位數組,你可能需要撥打val units = Array.fill(5)(())
。
空,大概是隻應該出現在這個字符串表示。一旦你得到一個值從數組中,它是「拆箱」,以Unit
:
scala> val units = new Array[Unit](5)
units: Array[Unit] = Array(null, null, null, null, null)
scala> units(0)
// note: no result
比較:
scala> val refs = new Array[AnyRef](5)
refs: Array[AnyRef] = Array(null, null, null, null, null)
scala> refs(0)
res0: AnyRef = null // we do get the null here
有一個類似的討論在that question與Nothing
而不是Unit
。
我不知道該股價值被拆箱:'(新陣列[單位](5))(0)==()'返回'false'。並且'(new Array [Unit](5))(0)== null'返回true並且有一個有趣的警告! '{val a = Array.fill(5)(());一個(0)==()}'將返回'true'。 – huynhjl 2011-05-02 20:27:56