gpt4 book ai didi

scala - 什么是 SBT := operator in build. sbt?

转载 作者:行者123 更新时间:2023-12-05 01:43:41 25 4
gpt4 key购买 nike

我是 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)

我最好的猜测是它的意思是“如果尚未声明则声明”。

最佳答案

:= 本质上与普通赋值运算符 = 无关。它不是内置的 scala 运算符,而是称为 := 的方法/宏系列。这些方法(或宏)是类的成员,例如 SettingKey[T] (与 TaskKey[T]InputKey[T] 类似)。它们使用 key := value 表达式的右侧,并返回 Def.Setting[T] 类型的实例。 (或类似地,Tasks),其中 T 是键表示的值的类型。它们通常以中缀表示法书写。如果没有语法糖,这些方法/宏的调用将如下所示:

key.:=(value)

构造的 SettingTask 又是构建定义的基本构建 block 。

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

关于scala - 什么是 SBT := operator in build. sbt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48670674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com