http (/ * * ici l'argument /) Comment cet objet (Http) utilisé sans une méthode explicite ou implicite?
-
21-09-2019 - |
Question
Dans l'exemple pour le codage avec JSON en utilisant DataBinder Dispatch Nathan utilise un objet (Http) sans méthode, ici:
import dispatch._
import Http._
Http("http://www.fox.com/dollhouse/" >>> System.out )
Comment est-il fait cela?
Merci pour toutes les réponses que je n'étais pas unfortunatly assez précis ...
On dirait qu'il est tout simplement passer un argument à un constructeur de classe d'objet ou d'un compagnon Http.
Dans un autre exemple, je l'ai vu une autre forme:
http = new Http
http(/* argument here */)
Est-ce valide Scala? Je suppose que ce doit être, parce que l'auteur est un expert Scala. Mais il fait aucun sens pour moi. Les actions sont habituellement effectuées en invoquant des méthodes sur des objets, que ce soit explicitement object.doSomething () ou implicitement comme objet = quelque chose (en utilisant la méthode apply () sous le sucre syntaxique).
Tout ce que je peux penser est qu'un constructeur est utilisé pour faire quelque chose en plus de la construction d'un objet. En d'autres termes, il a des effets secondaires, comme dans ce cas aller au large et faire quelque chose sur le web.
La solution
Je l'ai vu une autre forme:
val http = new Http http(/* argument here */)
Est-ce valide Scala? Je suppose qu'il faut être, parce que l'auteur est une Scala expert. Mais il me fait aucun sens.
Dans la première ligne, le constructeur de la classe Http est appelé pour créer une nouvelle instance. Rien différent de celui de Java. Dans la deuxième ligne, la méthode de la classe Http appliquer est invoquée sur cette instance avec (/* argument here */)
. C'est évidemment une chose spécifique à Scala.
Il peut y avoir une certaine confusion lorsque la classe a un object
compagnon avec une méthode apply
. Dans ce cas (en supposant que appliquer la méthode juste le invoque construtor de classe compagnon), de nouvelles instances peuvent être créées sans le mot-clé new
:
val http = Http()
crée la nouvelle instance. Ceci est un modèle très commun, mais l'objet compagnon appliquer des méthodes peuvent faire quoi que ce soit et avoir une signature.
Autres conseils
Il fonctionne en définissant une méthode appelée apply
sur l'objet. Si une telle méthode est présent, les arguments peuvent être appliqués à l'objet lui-même. - ce qui signifie en interne les arguments sont passés à la méthode de apply
Si un objet a une méthode de apply
, vous pouvez « invoquer » l'objet comme si elle était une méthode (qui appelle en fait sa méthode apply).