2016-04-15 3 views
3

私はまだScalaとビルドツールSBTの新機能です。 SBTの公式スタートガイドでは、次の例のbuild.sbtが発生しました。このSBT DSLの解釈方法は?

lazy val root = (project in file(".")). 
    settings(
    name := "hello" 
) 

DSLは何らかのスクリプト言語のように見えますが、私はまだ何が起こっているのか理解するのに苦労しています。私の質問は:

  1. file(".")とは何ですか?現在のディレクトリにあるファイルのリストを返しますか?
  2. ステートメントproject in file(".")はfor-inループ式ですか?
  3. なぜrootlazyという注釈を付ける必要がありますか?

ありがとうございます。

答えて

3

ファイル( "。")とは何ですか?現在の ディレクトリにあるファイルのリストを返しますか?

file(".")java.io.Fileタイプ、which describes a file/directoryの別名であるsbt.Fileタイプを返します。以下のためのインループ式A

scala> import java.io._ 
import java.io._ 

scala> val f = new File(".") 
f: java.io.File = . 

scala> f.getAbsolutePath 
res0: String = C:\Users\MyUser\. 

scala> f.isDirectory 
res1: Boolean = true 

は、ファイル内のステートメントのプロジェクトです:ドットは、トップレベルのプロジェクトを参照するか、現在のファイル/ディレクトリへの相対パスが存在しますか(「」)?

いいえそれはproject.in(file("."))と同等の単純なメソッド呼び出し、です。 Scalaは根が怠け者で注釈されなければならないのはなぜあなたは.

なしアリティ0または1のメソッドを呼び出すことを可能にする、"infix notation"機能を呼びかけていますか?

これはありません。 Scalaのlazyは、コンストラクタの初期化中にあらかじめ変数を割り当てる代わりに、誰かが最初に呼び出すときに変数の割り当てを延期します。

関連する問題