私はApp Traitを拡張した後、私のプログラムがどのように動作するのか理解しています。 I went through this link to understand how App trait works。このリンクでは、App特性を拡張することにより、遅延評価を達成していると言われています。なぜ私は怠惰な評価が必要でしょうか? Appの特性を拡張するのではなく、main()を直接呼び出すよりも、どのように怠惰な評価が優れていますか?ScalaでApp特性を拡張して怠惰な評価が必要なのはなぜですか?
2
A
答えて
4
私は怠け者の評価は必要ありませんが、それを実装する唯一の方法なので、舞台裏で使っています。 scaladocから:
App
トレイトはすぐに実行可能 プログラムにオブジェクトを有効に使用することができます。あなたのコードを呼び出すためmain
メソッドをオーバーライドする必要があるため、通常の手段でobject MainApp extends App {...}
:この構文を達成する方法はありませんobject MainApp { def main(args: Array[String]): Unit = { ... } }
:あなたが執筆の決まり文句を避ける
App
形質を使用することにより
。したがって、DelayedInit
のコンパイラトリックを使用すると、オブジェクト本体をmainから呼び出される関数呼び出しに変えることができます。これは、コードをメインエントリポイントに接続する方法です。
scaladoc言及注意点は次のとおり
なお、この特性は、オブジェクト のフィールドは前に初期化されていないことを意味 [DelayedInit]機能を使用して実装されることに留意されたい主な方法は が実行されています。
個人的には、私が個人的に好きな方法です。これとは対照的に、これはmain
メソッドが呼び出される前に実行されるJavaの静的初期化子とは異なります。
簡単な説明をいただきありがとうございます。コードをもっと速く書くことが驚きです。 –