質問

Unit のサブタイプであるように指定されています AnyVal (そしてその唯一の価値はです ())、それで、なぜこれが可能なのか:

scala> val units = new Array[Unit](5)
units: Array[Unit] = Array(null, null, null, null, null)

これは、REPLのアレイ印刷メカニズムのバグ/省略なのでしょうか、それともその理由はありますか?

役に立ちましたか?

解決 3

Scala 2.9のために修正されましたが、現在印刷しています。

scala> val units = new Array[Unit](5)
units: Array[Unit] = Array((), (), (), (), ())

他のヒント

これは、配列の初期化による問題/制限だと思います。プリミティブ値の場合、アレイはデフォルト値に初期化されます。ネイティブアレイを活用するSCALAアレイにより、JVMによって推定されます。

他のタイプの場合、値はオブジェクトにラップされ、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

同様の議論がありました その質問Nothing それ以外の Unit.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top