1
私はスカラ座に新たなんだと、この宣言の理解とトラブルになった:Scalaのメソッド宣言を理解するには?
val props = Props[TestActor]
:
def apply[T <: Actor: ClassTag](): Props = __THE_DEFENITION_GOES_HERE__
はなぜ我々はこのようにそれを使用することができます:ここでは
はAkka
のProps
オブジェクトからの宣言です
class TestActor extends Actor
。私はちょうどGeneric Type
引数でどのように興味があります、コンパイラは、適切なメソッドのdefenitionを見つけることができます。どのように機能するのですか?
しかし 'ClassTag'は' T <:Actor:ClassTag'で何を意味しますか? '暗黙的に[ClassTag [T]]。runtimeClass'として使用されます。 – user3663882
'ClassTag'は実行時にクラスに関する情報を保持します。 ':'は 'ClassTag'の_context bound_を定義します。これは暗黙のスコープにClassTag [T]のインスタンスがあることを意味します。それは 'def apply [T <:Actor](暗黙の証拠:ClassTag [T])'の構文的砂糖です。 「ClassTag」クラスの詳細については、次のURLを参照してください。http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html コンテキスト境界の詳細については、http: //docs.scala-lang.org/tutorials/FAQ/context-and-view-bounds.html#what-is-a-context-bound – stefanobaghino
@ user3663882「ClassTag」は、タイプ消去を回避する方法です。 JVM。 – Jesper