2016-04-15 56 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. 爲什麼root必須註明lazy

謝謝。

回答

3

什麼是文件(「。」)?它是否返回當前 目錄中的文件列表?

file(".")返回sbt.File類型,這是對於java.io.File類型,which describes a file/directory的別名。點指的是其當前文件/目錄所在的頂級項目,或相對路徑(「」)

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 

是在文件中的語句項目for-in循環的表達?

不是。這是一個簡單的方法調用,相當於project.in(file("."))。 Scala有一個叫"infix notation"功能,它允許你調用元數0或1的方法,而不.

爲什麼根已被懶惰的註解?

它沒有它。 lazy斯卡拉推遲分配一個變量的時候有人第一次調用它,而不是在構造函數初始化時事先分配它。