为什么不在这里获取范围值?

时间:2011-12-21 18:05:34

标签: scala sbt

通过范围的入门指南,似乎意味着我应该能够做到这样的事情:

(其中Build.scala包含来自getting started guide的sampleKeyA / B / C / D)

sampleKeyA := "value 1"

sampleKeyA in compile := "value 2"

compile <<= (compile in Compile, sampleKeyA) map { (result, s) =>
  println("sample key: " + s)
  result
}

但是当我运行sbt compile时,为sampleKeyA打印的值是“value 1”,而不是我期望的“value 2”。我错过了什么?

2 个答案:

答案 0 :(得分:4)

首先,在编译中定义 sampleKeyA当然是有效的,因为它将设置范围限定为编译任务。

其次,您得到值1 ,因为您使用的是没有上述范围的 sampleKeyA 。在编译中将其更改为 sampleKeyA,您将获得值2

要看到这一点,只需启动一个“空”的sbt会话并执行以下命令:

> set SettingKey[String]("sampleKeyA") := "value 1"           
[info] Reapplying settings...
[info] Set current project to default-a57b70 (in build file:/Users/heiko/tmp/sbt/)
> set SettingKey[String]("sampleKeyA") in compile := "value 2"
[info] Reapplying settings...
[info] Set current project to default-a57b70 (in build file:/Users/heiko/tmp/sbt/)
> sampleKeyA                                                  
[info] value 1
> sampleKeyA(for compile)                                     
[info] value 2

答案 1 :(得分:2)

它选择了value 1,因为value 2的范围是编译,但是你得到了通用版本。如果你写了sampleKeyA in Compile,它就可以了。或者,也许是in compile - 我认为声明是不正确的,因为范围compile并不存在。