如何解读这个SBT DSL?

时间:2016-04-15 13:13:12

标签: scala sbt

我还是Scala和构建工具SBT的新手。在SBT的官方入门指南中,我遇到了以下build.sbt的示例。

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

DSL看起来像某种脚本语言,但我仍然在努力去理解正在发生的事情。我的问题是:

  1. 什么是file(".")?它是否返回当前目录中的文件列表?
  2. 语句project in file(".")是for-in循环表达式吗?
  3. 为什么root必须使用lazy进行注释?
  4. 感谢。

1 个答案:

答案 0 :(得分:3)

  

什么是文件(“。”)?它是否返回当前文件列表   ?目录

"$source is compared to $compare :" | out-file $log -width 120 $comparison | out-file $log -width 120 -Append 会返回file(".")类型,该类型是sbt.File类型的别名which describes a file/directory。点指的是顶级项目,或当前文件/目录所在的相对路径:

java.io.File
  

语句项目(“。”)是否为for-in循环表达式?

没有。这是一个简单的方法调用,相当于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 。 Scala有一个名为"infix notation"的功能,它允许您在没有project.in(file("."))

的情况下调用arity 0或1的方法
  

为什么root必须用lazy注释?

它没有。 Scala中的.将变量的分配推迟到有人第一次调用它时,而不是在构造函数初始化期间预先分配变量。