1
我是新來的Scala和陷入麻煩與理解這個聲明:如何理解Scala的方法聲明?
下面是Akka
的Props
對象聲明:
def apply[T <: Actor: ClassTag](): Props = __THE_DEFENITION_GOES_HERE__
我們爲什麼可以這樣使用它:
val props = Props[TestActor]
其中class TestActor extends Actor
。我很好奇如何通過Generic Type
的說法,編譯器能夠找到適當的方法defenition。它是如何工作的?
但是'T <:Actor:ClassTag'中的'ClassTag'是什麼意思?它使用'隱式[ClassTag [T]]。runtimeClass'。 – user3663882
'ClassTag'在運行時攜帶關於類的信息。 ':'在'ClassTag'上定義了一個_context bound_,意思是「在隱式範圍內有一個ClassTag [T]」的實例;它是'def apply [T <:Actor](隱式證據:ClassTag [T])'的語法糖。 有關'ClassTag'類的更多信息,可以閱讀: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