答案 0 :(得分:7)
SBT 0.13在使用宏和特殊“提取器”{{:=
,+=
和++=
的帮助下消除了对这些运算符的需求,并简化了构建定义。 1}}。因此不再需要这些操作员了。我仍在使用的唯一内容是.value
您可以将某些功能应用于某些设置的值,但也可以使用~=
和:=
表示
答案 1 :(得分:3)
在您的问题中,我认为您已经混合了两组操作 - 一组<+=
和<++=
已经或即将被弃用&#34;支持:=
,+=
和++=
,另有?
和??
经常使用,因为所有内容都可以用:=
,+=
和++=
来表达(人们经常会发现他们的用例足够3)。
阅读More operations中有关?
和??
的sbt官方文档。
至于例子:
?
lazy val unintiedKey = settingKey[String]("Unitialized key")
lazy val someKey = settingKey[String]("Key to check the value of another")
someKey := unintiedKey.?.value getOrElse "new value"
如果给出上述show someKey
{/ 1}},您认为打印出来的是什么?
build.sbt
将以下内容添加到> show someKey
[info] new value
以初始化build.sbt
设置时:
uninitedKey
unintiedKey := "Another value"
也发生了变化:
someKey
> show unintiedKey
[info] Another value
> show someKey
[info] Another value
让我们使用以下??
定义构建:
build.sbt
猜猜lazy val unintiedKey = settingKey[String]("Unitialized key")
lazy val someKey = settingKey[String]("Key to check the value of another")
someKey := (unintiedKey ?? "uninitedKey had no value").value
的价值是什么?
someKey
理解操作(构成sbt.SettingKey API)的关键是理解sbt中的设置 - 它是一对密钥和初始化,它被转换为可用的设置当范围应用于它时。