build.sbt中```,`??`,`< ++ =`,`< + =`的例子在哪里?

时间:2014-09-13 04:41:29

标签: scala sbt

我正在阅读sbt document,发现有一些我从未使用过的特殊方法:

?
??
<++=
<+=

我在哪里可以找到它们的任何例子?

2 个答案:

答案 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中的设置 - 它是一对密钥和初始化,它被转换为可用的设置当范围应用于它时。