为什么方法main()在Scala的定义中不需要'='?

ses*_*ses 1 syntax program-entry-point scala method-declaration

可能重复:
scala:'def foo = {1}'vs'def foo {1}'

为什么main在Scala中定义方法时,没有必要使用=

例:

def main(args:Array[String]) {
    ...
Run Code Online (Sandbox Code Playgroud)

但是如果想要定义另一个函数则需要它.

def main(args:Array[String]) **=** {
...
Run Code Online (Sandbox Code Playgroud)

有人可以解释这种语法吗?

dhg*_*dhg 7

在Scala中,方法声明中的等号告诉编译器该方法返回一些东西.如果没有出现等号,则编译器知道该方法不返回任何内容.这相当于voidJava中的方法.在Scala中,返回任何内容与返回相同Unit.

scala> def noEquals(x: Int) { x + 1 }
noEquals: (x: Int)Unit

scala> val y = noEquals(5)
y: Unit = ()
Run Code Online (Sandbox Code Playgroud)

与出现等号的示例相比:

scala> def hasEquals(x: Int) = { x + 1 }
hasEquals: (x: Int)Int

scala> val z = hasEquals(5)
z: Int = 6
Run Code Online (Sandbox Code Playgroud)

在Java中,main方法不返回任何内容(它被声明为void,如public static void main(String[] args)).因此,Scala版本不会出现等号.

另请注意,只要方法返回Unit(尽管这会违反约定),您可以使用等号编写main方法.此外,对于其他方法,"等号"不是"必需的"......只需要返回的东西.如果你正在编写一个不返回任何东西的方法,那么放弃等号是完全可以接受的(也是适当的).