2016-04-12 18 views
2

私はApp Traitを拡張した後、私のプログラムがどのように動作するのか理解しています。 I went through this link to understand how App trait works。このリンクでは、App特性を拡張することにより、遅延評価を達成していると言われています。なぜ私は怠惰な評価が必要でしょうか? Appの特性を拡張するのではなく、main()を直接呼び出すよりも、どのように怠惰な評価が優れていますか?ScalaでApp特性を拡張して怠惰な評価が必要なのはなぜですか?

答えて

4

私は怠け者の評価は必要ありませんが、それを実装する唯一の方法なので、舞台裏で使っています。 scaladocから:

Appトレイトはすぐに実行可能 プログラムにオブジェクトを有効に使用することができます。あなたのコードを呼び出すためmainメソッドをオーバーライドする必要があるため、通常の手段でobject MainApp extends App {...}:この構文を達成する方法はありません

object MainApp { 
    def main(args: Array[String]): Unit = { ... } 
} 

:あなたが執筆の決まり文句を避けるApp形質を使用することにより

。したがって、DelayedInitのコンパイラトリックを使用すると、オブジェクト本体をmainから呼び出される関数呼び出しに変えることができます。これは、コードをメインエントリポイントに接続する方法です。

scaladoc言及注意点は次のとおり

なお、この特性は、オブジェクト のフィールドは前に初期化されていないことを意味 [DelayedInit]機能を使用して実装されることに留意されたい

主な方法は が実行されています。

個人的には、私が個人的に好きな方法です。これとは対照的に、これはmainメソッドが呼び出される前に実行されるJavaの静的初期化子とは異なります。

+0

簡単な説明をいただきありがとうございます。コードをもっと速く書くことが驚きです。 –