http (/ * * ici l'argument /) Comment cet objet (Http) utilisé sans une méthode explicite ou implicite?

StackOverflow https://stackoverflow.com/questions/2485298

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.

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top