Scala build.SBT中的SBT:=运算符是什么?

Scala build.SBT中的SBT:=运算符是什么?,scala,sbt,operators,Scala,Sbt,Operators,我是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.") 在这个更大的代码片段中使用了几

我是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.")
在这个更大的代码片段中使用了几次:

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)
lazy val jobServer=Project(id=“作业服务器”,base=file(“作业服务器”))
.设置(commonSettings)
.设置(旋转设置)
.settings(程序集:=null.asInstanceOf[文件])
.设置(
description:=“Spark即服务:Apache Spark的RESTful作业服务器”,
libraryDependencies++=sparkDeps++slickDeps++cassandraDeps++securityDeps++coreTestDeps,

test in test中的test
:=
基本上与普通赋值运算符
=
无关。它不是内置的scala运算符,而是一系列名为
:=
的方法/宏。这些方法(或宏)是类的成员,例如(类似于
任务键[T]
输入键[T]
)。它们使用
键的右侧:=value
表达式,并返回类型的实例(或类似地,
任务
s),其中,
T
是键表示的值的类型。它们通常用中缀符号书写。如果没有语法上的修饰,这些方法/宏的调用将如下所示:

key.:=(value)
构建的
设置
s和
任务
s依次是构建定义的基本构建块


这里需要理解的重要一点是,左侧的键不是代码块中的一些变量,而不仅仅是表示函数调用的活动堆栈帧中的内存位置(就像一个简单的变量所做的那样),左侧的键是相当复杂的对象,可以在构建过程中进行检查和传递。

您可能需要阅读sbt手册的“”部分(或者更好的是,整个)@dkim我正计划“根据需要”阅读sbt文档。有趣的是,他们在《入门指南》中反对这样做。感谢大家的提醒……所以看起来,
:=
=
相同,只是它检查类型安全。@lxxii普通的赋值运算符
=
肯定会检查类型安全ty.@LXIII James Roper的“”对我也很有帮助。谢谢@dkim,那篇文章很好。带有
:=
的行是“一个表达式,而不是一个语句”。Andrey的回答详细解释了这一点。