2 votes

Le type paramétré convertit Char en Int

J'ai accidentellement remarqué ce qui suit :

scala> class g[T](val x:T)   
defined class g

scala> val obj=new g[Int]('A')
obj: g[Int] = g@1082d45

scala> obj.x
res6: Int = 65

Que se passe-t-il ici ? Un typecast ?

2voto

Rex Kerr Points 94401

C'est une conversion ascendante des primitives. Les valeurs primitives se convertissent elles-mêmes au type numériquement plus grand suivant si cela semble nécessaire. Ainsi, val s: Short = (0: Byte) œuvres. Rien ne se convertit en Char mais Char deviendra un Int , Long , Float ou Double s'il le faut pour être le bon type d'argument.

La raison pour laquelle nous procédons ainsi est principalement due au fait que c'est la façon dont Java procède, mais aussi parce que l'obtention d'une erreur à partir de la commande val d: Double = 0 est vraiment ennuyeux car 0 s'inscrit bien sûr dans un Double sans aucun problème, et il n'y a aucune ambiguïté sur le type non plus.

2voto

Kazuhiro Sera Points 759

Voir aussi :

https://github.com/scala/scala/blob/1c8add14605c4c6e818693d0d9c653407ab69837/src/library/scala/Predef.scala#L319

La conversion implicite suivante est activée par défaut.

implicit def char2int(x: Char): Int = x.toInt

Dans ce cas, le type attendu est Int . Ainsi, le Char est convertie.

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