Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何理解Scala';s方法声明?_Scala_Methods - Fatal编程技术网

如何理解Scala';s方法声明?

如何理解Scala';s方法声明?,scala,methods,Scala,Methods,我是Scala的新手,在理解这个声明时遇到了麻烦: 以下是来自AkkaProps对象的声明: def apply[T <: Actor: ClassTag](): Props = __THE_DEFENITION_GOES_HERE__ 其中类TestActor扩展了Actor。我很好奇,仅仅通过泛型类型参数,编译器是如何找到合适的方法防御的。它是如何工作的?在Scala对象中的应用方法有一些特殊的魔力。这: val something = Hello() 这是一种特殊的快捷方式语法:

我是Scala的新手,在理解这个声明时遇到了麻烦:

以下是来自Akka
Props
对象的声明:

def apply[T <: Actor: ClassTag](): Props = __THE_DEFENITION_GOES_HERE__

其中
类TestActor扩展了Actor
。我很好奇,仅仅通过
泛型类型
参数,编译器是如何找到合适的方法防御的。它是如何工作的?

在Scala
对象中的
应用
方法有一些特殊的魔力。这:

val something = Hello()
这是一种特殊的快捷方式语法:

val something = Hello.apply()
val props = Props.apply[TestActor]()
类似地,看看您的示例:

val props = Props[TestActor]
这只是一个简短的语法:

val something = Hello.apply()
val props = Props.apply[TestActor]()

[TestActor]
只是为
apply
方法填充类型参数。

但是
ClassTag
T
ClassTag
中的意思是在运行时携带有关类的信息。
定义了
ClassTag
上的上下文绑定,这意味着“在隐式范围中有ClassTag[T]的实例”;它是
def apply[T@user3663882的语法糖
ClassTag
是避免JVM上类型擦除的一种方法。