Scala 这个<<;=SBT中的操作员解释

Scala 这个<<;=SBT中的操作员解释,scala,sbt,Scala,Sbt,我想完全理解这两种形式是如何等价的。正如您正确指出的,其目的是在另一个设置的定义中使用一个设置的结果。在内部,这意味着sbt建立了从version到publishTo的依赖关系 第二种形式是在另一种设置的:={}块中使用.value对设置进行“评估”,触发一个宏,该宏与第一种形式类似地重写树。之所以引入此语法,是因为这两种形式的是等效的。正如您正确指出的,其目的是在另一个设置的定义中使用一个设置的结果。在内部,这意味着sbt建立了从version到publishTo的依赖关系 第二种形式是在另一

我想完全理解这两种形式是如何等价的。正如您正确指出的,其目的是在另一个设置的定义中使用一个设置的结果。在内部,这意味着sbt建立了从
version
publishTo
的依赖关系


第二种形式是在另一种设置的
:={}
块中使用
.value
对设置进行“评估”,触发一个宏,该宏与第一种形式类似地重写树。之所以引入此语法,是因为这两种形式的
是等效的。正如您正确指出的,其目的是在另一个设置的定义中使用一个设置的结果。在内部,这意味着sbt建立了从
version
publishTo
的依赖关系


第二种形式是在另一种设置的
:={}
块中使用
.value
对设置进行“评估”,触发一个宏,该宏与第一种形式类似地重写树。之所以引入这种语法,是因为
谢谢,我还刚刚意识到SettingKey有一个apply方法返回Initialize[Z],这使得前一种形式在语法上是合理的。现在,这就提出了一个问题:后者的宏观扩张是如何触发的。。。或者SettingKey的依赖结构完全是通过惰性求值处理的谢谢,我还刚刚意识到SettingKey有一个返回Initialize[Z]的apply方法,这使得前一种形式在语法上是合理的。现在,这就提出了一个问题:后者的宏观扩张是如何触发的。。。或者设置键的依赖结构完全是通过延迟计算来处理的
publishTo <<= version { (v: String) =>
    if (v.trim.endsWith("SNAPSHOT"))
        Some("Artifactory Realm" at "http://artifactory.erfangc.io/artifactory/libs-snapshot-local;build.timestamp=" + new java.util.Date().getTime)
    else
        Some("Artifactory Realm" at "http://artifactory.erfangc.io/artifactory/libs-release-local")
}
publishTo := {
    if (version.value.trim.endsWith("SNAPSHOT"))
        Some("Artifactory Realm" at "http://artifactory.erfangc.io/artifactory/libs-snapshot-local;build.timestamp=" + new java.util.Date().getTime)
    else
        Some("Artifactory Realm" at "http://artifactory.erfangc.io/artifactory/libs-release-local")
}