【发布时间】:2018-07-18 03:34:05
【问题描述】:
我是 Scala 和 SBT 的新手。我注意到一个开源项目的 build.sbt 中有一个不熟悉的操作符:
:=
这里有几个例子说明它是如何使用的:
lazy val akkaApp = Project(id = "akka-app", base = file("akka-app"))
.settings(description := "Common Akka application stack: metrics, tracing, logging, and more.")
在这个更大的代码 sn-p 中使用了几次:
lazy val jobServer = Project(id = "job-server", base = file("job-server"))
.settings(commonSettings)
.settings(revolverSettings)
.settings(assembly := null.asInstanceOf[File])
.settings(
description := "Spark as a Service: a RESTful job server for Apache Spark",
libraryDependencies ++= sparkDeps ++ slickDeps ++ cassandraDeps ++ securityDeps ++ coreTestDeps,
test in Test <<= (test in Test).dependsOn(packageBin in Compile in jobServerTestJar)
.dependsOn(clean in Compile in jobServerTestJar)
.dependsOn(buildPython in jobServerPython)
.dependsOn(clean in Compile in jobServerPython),
testOnly in Test <<= (testOnly in Test).dependsOn(packageBin in Compile in jobServerTestJar)
.dependsOn(clean in Compile in jobServerTestJar)
.dependsOn(buildPython in jobServerPython)
.dependsOn(clean in Compile in jobServerPython),
console in Compile <<= Defaults.consoleTask(fullClasspath in Compile, console in Compile),
fullClasspath in Compile <<= (fullClasspath in Compile).map { classpath =>
extraJarPaths ++ classpath
},
fork in Test := true
)
.settings(publishSettings)
.dependsOn(akkaApp, jobServerApi)
.disablePlugins(SbtScalariform)
我最好的猜测是它的意思是“如果还没有声明就声明”。
【问题讨论】:
-
你可能想阅读 sbt 手册的“Build definition”部分(或者更好的是,整个“Getting Started with sbt”)。
-
@dkim 我正计划“按需”阅读 sbt 文档。有趣的是,他们在入门指南中鼓励反对这一点。感谢您的提醒...所以看起来
:=与=相同,只是它检查类型安全。 -
@LXXIII 普通的赋值运算符
=确实会检查类型安全性。 -
@LXXIII James Roper 的“sbt - A declarative DSL”对我也有帮助。
-
感谢@dkim,那篇文章很好。带有
:=的行是“表达式,而不是语句”。安德烈的回答详细解释了。