当我在下面运行代码时,不会调用apply方法:
object Tester2 {
def apply(){
println("apply")
}
def main(args: Array[String]) {
Tester2
}
}
但是如果我在main方法中使用Tester2()
而不是Tester
,则调用apply方法
为了调用apply方法,为什么需要()?
答案 0 :(得分:4)
Tester2
是一个对象名,一个值。表达式可能只包含单个值。您可以将Tester2
替换为2
或"str"
。
Tester2
是结果类型为Tester2.type
的表达式。就像2
是结果类型为Int
的表达式一样。
要调用apply
方法,您应该添加如下括号:
Tester2()
您可以在没有括号的情况下明确调用apply
方法:
Tester2.apply
答案 1 :(得分:2)
当您致电Tester2
时,您将获得一个Tester2对象。当您调用Tester2()
时,您正在调用Tester2对象的apply方法。当使用语法sugar作为Tester2()
时,Scala需要'()'来消除创建新对象或调用apply()的歧义。