Comment se compile le texte suivant :
import scala.concurrent.duration._
val time = 20 seconds
Qu'est-ce qui se passe réellement ici ?
Comment se compile le texte suivant :
import scala.concurrent.duration._
val time = 20 seconds
Qu'est-ce qui se passe réellement ici ?
Il y a plusieurs choses qui se passent.
Tout d'abord, Scala permet d'omettre les points et les parenthèses dans de nombreux appels de méthodes, ainsi 20 seconds
est équivalent à 20.seconds()
*.
Deuxièmement, une "conversion implicite" est appliquée. Puisque 20
est un Int
y Int
n'a pas seconds
le compilateur recherche une conversion implicite qui prend une méthode Int
et renvoie quelque chose qui a a seconds
la recherche étant limitée par la portée de votre appel de méthode.
Vous avez importé DuréeInt dans votre lunette. Depuis DurationInt
est une classe implicite avec un Int
son constructeur définit un paramètre implicite Int => DurationInt
conversion. DurationInt
a un seconds
de sorte qu'il satisfait à tous les critères de recherche. Par conséquent, le compilateur réécrit votre appel en tant que new DurationInt(20).seconds
**.
*Je dis ça au sens large. 20.seconds()
est en fait invalide parce que le seconds
n'a pas de liste de paramètres et donc les parenthèses doit être omise lors de l'appel de la méthode.
**En fait, ce n'est pas tout à fait vrai car DurationInt
est une classe de valeurs, donc le compilateur évitera d'envelopper l'entier si possible.
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.