3 votes

Pourquoi un tableau d'unités peut-il contenir null ?

Unit est spécifié comme étant un sous-type de AnyVal (et sa seule valeur est () ), alors pourquoi est-ce possible ?

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

S'agit-il simplement d'un bogue ou d'une omission dans le mécanisme d'impression des tableaux de la REPL ou y a-t-il une raison à cela ?

4voto

Jean-Philippe Pellet Points 25240

Le zéro est, vraisemblablement, censé n'apparaître que dans cette représentation sous forme de chaîne de caractères. Dès qu'une valeur est extraite du tableau, elle est "décompressée" en Unit :

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

scala> units(0)
// note: no result

Comparer avec :

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

Une discussion similaire a eu lieu dans cette question con Nothing au lieu de Unit .

3voto

huynhjl Points 26045

Je pense qu'il s'agit d'un problème ou d'une limitation au niveau de l'initialisation des tableaux. Pour les valeurs primitives, les tableaux sont initialisés à leur valeur par défaut, je présume par la JVM, en vertu du fait que les tableaux Scala s'appuient sur les tableaux natifs.

Pour les autres types, la valeur serait intégrée dans un objet, il semble qu'ils soient initialisés en tant que null.

Si vous souhaitez obtenir un tableau d'unités, vous devrez peut-être appeler val units = Array.fill(5)(()) .

1voto

soc Points 10868

Il a été corrigé pour Scala 2.9 et imprime maintenant :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X