HTTP(/ *ここでは引数* /)どのようにこのオブジェクト(HTTP)は、明示的または暗黙的な方法なしで使用されていますか?
-
21-09-2019 - |
質問
のネイサンは、ここに示した方法せずにオブジェクト(HTTP)を使用します:
import dispatch._
import Http._
Http("http://www.fox.com/dollhouse/" >>> System.out )
どのように彼はこれをしているのですか?
すべての答えをありがとう残念ながら私は特定できなかった十分な...
それは単にクラスまたはコンパニオンオブジェクトのHttpのコンストラクタに引数を渡しているように見えます。
別の例では、私は別のフォームを見てきました
http = new Http
http(/* argument here */)
は、この有効なScalaのですか?著者はScalaの専門家であるので、私は、それがなければなりませんね。しかし、それは私には意味がありません。アクションは、通常、(構文糖下適用()メソッドを使用して)何か= object.doSomething(AS)または暗黙的にオブジェクトとしてかどうか明示的、オブジェクトのメソッドを呼び出すことによって実行されます。
私は考えることができるすべては、コンストラクタは、オブジェクトを構築する以外に何かをするために使用されていることです。言い換えれば、このような、この場合のような副作用、オフに行くと、ウェブ上で何かを持っている。
解決
私は別のフォームを見てきました
val http = new Http http(/* argument here */)
は、この有効なScalaのですか?私はそれをしなければならないと思います 著者はスカラであるので、可能 専門家。しかし、それは私には意味がありません。
最初の行で、httpクラスのコンストラクタは、新しいインスタンスを作成するために呼び出されます。 Javaでは異なる何もありません。 2行目には、httpクラスの適用方法は(/* argument here */)
と、そのインスタンスに呼び出されます。これは明らかにScalaの固有のものです。
object
メソッドを持つコンパニオンapply
を持っている場合、はいくつかの混乱が存在する場合があります。
:その場合は(適用方法は、単にコンパニオンクラスのコンストラクタを呼び出すと仮定して)、新しいインスタンスがnew
キーワードを指定せずに作成することができます
val http = Http()
新しいインスタンスを作成します。コンパニオンオブジェクトは、メソッドが何かをして任意の署名を持っていることが適用されますが、これは、非常に一般的なパターンです。
他のヒント
これは、オブジェクトにapply
と呼ばれる方法を定義することによって動作します。このような方法が存在する場合、引数は、オブジェクト自体に適用することができる - 内部引数がapply
メソッドに渡された手段
オブジェクトがapply
メソッドを持っている場合は、あなたがすることができ、「呼び出し」、それは方法であったかのようにオブジェクト(その方法を適用する実際たinvoke)。