Почему множество подразделений может удерживать нуль?

StackOverflow https://stackoverflow.com/questions/5852443

Вопрос

Unit указан как подтип AnyVal (И его единственное значение ()), так почему это возможно:

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

Это просто ошибка/упущение в механизме печати реплики или есть причина для этого?

Это было полезно?

Решение 3

Это было зафиксировано для Scala 2.9 и теперь отпечатки:

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

Другие советы

Я думаю, что это проблема/ограничение с инициализацией массива. Для примитивных значений массивы инициализируются до их значения по умолчанию, которое я предполагал JVM в силу массивов Scala, использующих нативные массивы.

Для других типов значение будет завершено в объект, кажется, они становятся инициализированными как нулевые.

Если вы хотите массив устройства, вам может потребоваться позвонить 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