93

違いは何ですか

object Application extends App {
   println("Hello World")
}

object Application {
    def main(args: Array[String]): Unit = {
        println("Hello World");
    }
}
4

3 に答える 3

65

Appトレイトは、実行可能なscalaプログラムを作成するための便利な方法です。mainメソッドの代替との違いは、(明らかな構文上の違いは別として)Appトレイトが遅延初期化機能を使用することです。

2.9のリリースノートから(http://www.scala-lang.org/old/node/9483を参照)

Appトレイトを継承するオブジェクトは、代わりにScala 2.9の遅延初期化機能を利用して、継承されたmainメソッドの一部として本体全体を実行します。

Appスキームのもう1つの新機能は、コマンドライン引数にargs値(トレイトAppから継承)を介してアクセスできるようになったことです。

于 2012-07-26T10:58:13.130 に答える
4

これらの2つのケースは、scalaスクリプトでは同じではありません。

object extends App""コマンドでは実行されませんでしたが、 mainメソッドscala MyObject.scalaを含むオブジェクトは" "コマンドで実行されました。これは、スクリプトのmainメソッドを使用してオブジェクトを探すscalaとして説明されていました。scala MyObject.scala

EclipseのREPLまたはscalaworkseetを使用するMyObject.main(Array[String]())場合は、両方の場合を明示的に呼び出す必要があります。

この簡単なヒントは、私のような初心者に役立ちます。

于 2016-09-23T15:24:25.540 に答える
0

アプリの特性は、[[DelayedInit]]機能を使用して実装されます。つまり、メインメソッドが実行される前に、オブジェクトのフィールドは初期化されません。

于 2018-08-18T15:10:25.550 に答える