为什么不调用apply()?

时间:2013-08-08 21:14:48

标签: scala

当我在下面运行代码时,不会调用apply方法:

object Tester2 {

  def apply(){
    println("apply")
  }

  def main(args: Array[String]) {
    Tester2
  }
}

但是如果我在main方法中使用Tester2()而不是Tester,则调用apply方法

为了调用apply方法,为什么需要()?

2 个答案:

答案 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()的歧义。