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

时间:2012-09-07 01:08:44

标签: scala syntax main method-declaration

  

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

为什么在Scala中定义方法main时,不需要使用=

示例:

def main(args:Array[String]) {
    ...

但如果想要定义另一个功能,则需要它。

def main(args:Array[String]) **=** {
...

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

1 个答案:

答案 0 :(得分:7)

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

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

scala> val y = noEquals(5)
y: Unit = ()

与出现等号的示例比较:

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

scala> val z = hasEquals(5)
z: Int = 6

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

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