1

重複の可能性:
scala: 'def foo = {1}' vs 'def foo {1}'

Scala でメソッドを定義するときにmainを使用する必要がないのはなぜ=ですか?

例:

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

しかし、別の関数を定義したい場合は、それが必要です。

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

誰かがこの構文を説明できますか?

4

1 に答える 1

7

Scala では、メソッド宣言の等号は、メソッドが何かを返すことをコンパイラに伝えます。等号が表示されない場合、コンパイラはメソッドが何も返さないことを認識しています。voidこれはJava のメソッドに相当します。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 では、メイン メソッドは何も返しません ( のようvoidに として宣言されていpublic static void main(String[] args)ます)。したがって、Scala バージョンでは等号が省略されています。

また、メソッドが返される限り、等号を使用してメイン メソッドを記述できることにも注意してくださいUnit(ただし、これは規則に反します)。また、等号は他のメソッドには「必須」ではありません...ものを返す必要があるものだけです。何も返さないメソッドを作成している場合は、等号を省略してもまったく問題ありません (そして適切です)。

于 2012-09-07T01:11:14.517 に答える