40 votes

Pourquoi certains(NULL) n'est pas considéré comme néant ?

Je suis curieux :

scala> Some(null) == None
res10: Boolean = false

Pourquoi Some(null) n'est-il pas transformé en None ?

60voto

Jean-Philippe Pellet Points 25240

Vous devez utiliser Option(null) pour atteindre l'effet souhaité et retourner None.

Some(null) crée simplement un nouveau Option avec une valeur définie (d'où Some) qui est en fait null, et il y a peu de raisons valables pour en créer un comme celui-ci en code réel.

15voto

overthink Points 9471

Je pense que les autres dans le fil de discussion font un bon travail expliquant pourquoi Some(null) « devrait » exister, mais si vous obtenez Some(null) quelque part et voulez un moyen rapide de le transformer en None, je l'ai fait avant :

scala> val x: Option[String] = Some(null)
x: Option[String] = Some(null)

scala> x.flatMap(Option(_))
res8: Option[String] = None

Et lorsque Option de départ est une valeur non nulle légitime, les choses fonctionnent comme vous le souhaitez probablement :

scala> val y: Option[String] = Some("asdf")
y: Option[String] = Some(asdf)

scala> y.flatMap(Option(_))
res9: Option[String] = Some(asdf)

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