我试图找到与此Java代码相对应的Scala语法。假设A是一个类,它具有方法sayHi。

根据有效的Java语法,new A().sayHi()可以完全编译。另一方面,当我尝试new A.sayHi()时,它不会在Scala中编译。我们在Scala中具有什么语法?

最佳答案

在Scala中,可以使用以下之一:

new A().sayHi()
(new A).sayHi()


如果没有括号,且在new之前,则将A.sayHi解释为类型,然后将new A.sayHi()用作类类型A.sayHi的实例。如果A.sayHi不是类类型,则将导致编译错误。

看一看:

scala> class A { def sayHi() = "hi" }; object A { type sayHi = String }
defined class A
defined object A

scala> new A().sayHi()
res0: String = hi

scala> new A.sayHi()  // same as `new String()`
res1: String = ""

scala> (new A).sayHi()
res2: String = hi

09-30 21:32