http(/* argumento */) Como é este Objeto (Http) que está sendo usado sem um explícito ou implícito método?

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

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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top