scala - 如何解释这个 SBT DSL?

标签 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

谢谢。

最佳答案

What is file(".")? Does it return a list of files in current directory?

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

Is the statement project in file(".") a for-in loop expression?

没有。这是一个简单的方法调用,相当于 project.in(file("."))。 Scala 有一个特性叫做 "infix notation" ,它允许您在没有 .

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

Why does root has to be annotated with lazy?

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

关于scala - 如何解释这个 SBT DSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36648185/

相关文章:

Scala 捕获由 future 序列引发的错误

java - 使用 scala 在 saxonica 9 EE 上进行模式感知 XSLT 转换

SBT 不使用基于 ssh 的解析器来解决依赖关系

intellij-idea - IntelliJ 中的 SBT xalan#serializer 错误

scala - 什么是 : "operation of a program should map input values to output values rather than change data in place" 的好例子

scala - AUX 模式解决方法

Scala Option[Future[T]] 到 Future[Option[T]]

java - Sbt 更新显示服务器访问错误 : java. security.ProviderException : java. lang.NegativeArraySizeException

scala - 如何从 AutoPlugin 修改 Compile 中的 sourceGenerators?

java.lang.NoClassDefFoundError : Could not initialize class