Scala 为什么不调用apply()?

Scala 为什么不调用apply()?,scala,Scala,当我运行以下代码时,未调用apply方法: object Tester2 { def apply(){ println("apply") } def main(args: Array[String]) { Tester2 } } 但是,如果我在main方法中使用Tester2()而不是Tester则调用apply方法 为什么调用apply方法需要()呢?Tester2是一个对象名,一个值。表达式只能包含单个值。您可以用2或“str”替换Tester2 Tes

当我运行以下代码时,未调用apply方法:

object Tester2 {

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

  def main(args: Array[String]) {
    Tester2
  }
}
但是,如果我在main方法中使用
Tester2()
而不是
Tester
则调用apply方法


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

Tester2
是一个对象名,一个值。表达式只能包含单个值。您可以用
2
“str”
替换
Tester2


Tester2
是一个结果类型为
Tester2.type
的表达式。与
2
一样,它也是一个结果类型为
Int
的表达式

要调用
apply
方法,应添加如下括号:

Tester2()
您可以不使用括号显式调用
apply
方法:

Tester2.apply

Tester2
是一个对象名,一个值。表达式只能包含单个值。您可以用
2
“str”
替换
Tester2


Tester2
是一个结果类型为
Tester2.type
的表达式。与
2
一样,它也是一个结果类型为
Int
的表达式

要调用
apply
方法,应添加如下括号:

Tester2()
您可以不使用括号显式调用
apply
方法:

Tester2.apply

当您调用
Tester2
时,您将得到一个Tester2对象。当您调用
Tester2()
时,您正在调用Tester2对象的apply方法。Scala需要“()”来消除创建新对象和调用apply()之间的歧义,当使用语法sugar as
Tester2()
调用
Tester2
时,您将得到一个Tester2对象。当您调用
Tester2()
时,您正在调用Tester2对象的apply方法。Scala在使用语法sugar as
Tester2()

谢谢Senia时,需要使用“()”来消除创建新对象和调用apply()之间的歧义。由于这是一个对象/单例,“获取”比“创建”更合适,我更新了我的答案。谢谢Senia。因为这是一个对象/单例,“获取”比“创建”更合适,所以我更新了我的答案。