http(/* argumento */) Como é este Objeto (Http) que está sendo usado sem um explícito ou implícito método?
-
21-09-2019 - |
Pergunta
No exemplo de código usando Json Databinder Expedição Nathan usa um Objeto (Http), sem um método, mostrado aqui:
import dispatch._
import Http._
Http("http://www.fox.com/dollhouse/" >>> System.out )
Como ele está fazendo isso?
Obrigado por todas as respostas, infelizmente, eu não era específico o suficiente...
Parece que ele é simplesmente passar um argumento para o construtor da classe ou companheiro, objeto de Http.
Em outro exemplo, eu vi uma outra forma:
http = new Http
http(/* argument here */)
Isso é válido Scala?Eu acho que ele deve ser, porque o autor é um fone de ouvido Scala especialista.Mas não faz sentido para mim.As ações geralmente são realizadas através da invocação de métodos em objetos, se explicitamente como objeto.doSomething() ou implicitamente como objeto = algo (usando apply() método sob o açúcar sintático).
Tudo o que posso pensar é que um construtor é utilizado para fazer algo além de construção de um objeto.Em outras palavras, ele está a ter efeitos secundários, tais como, neste caso, a sair e fazer qualquer coisa na web.
Solução
Eu já vi outra forma:
val http = new Http http(/* argument here */)
Isso é válido Scala? Eu acho que deve ser, porque o autor é um especialista em Scala. Mas não faz sentido para mim.
Na primeira linha, o construtor da classe HTTP é invocado para criar uma nova instância. Nada diferente do que em Java. Na segunda linha, o método de aplicação da classe HTTP é invocado nessa instância com (/* argument here */)
. Isso é obviamente uma coisa específica de Scala.
Pode haver alguma confusão quando a classe tem um companheiro object
com um apply
método. Nesse caso (assumindo que o método Apply apenas invoca o construtor da classe Companion), novas instâncias podem ser criadas sem o new
palavra -chave:
val http = Http()
cria a nova instância. Esse é um padrão extremamente comum, embora o objeto complementar aplique métodos possa fazer qualquer coisa e ter qualquer assinatura.
Outras dicas
Ele funciona através da definição de um método chamado apply
no objeto.Se tal método é presente, os argumentos podem ser aplicadas ao objeto em si - o que significa que, internamente, os argumentos são passados para o apply
o método.
Se um objeto tiver um apply
Método, você pode "invocar" o objeto como se fosse um método (que realmente invocará seu método de aplicação).