人们可以写出类似的东西
(managedClasspath in Compile).value
Run Code Online (Sandbox Code Playgroud)
获得的值managedClasspath中的Compile配置.
类型(managedClasspath in Compile)再次是sbt.TaskKey(因为我们in用a 调用方法ConfigKey).
然而value,SettingKey或者没有方法TaskKey,我找不到任何提供这种方法的隐式类.那怎么会存在呢?这是一个神奇的宏伏都教吗?
这两个,工作组件有一些东西:
*XYZKey[_]都可以Initialize[_]通过隐式转换为适当的实例.默认情况下,这是一个初始化程序,它读取键上的现有值并返回它.sbt.std.MacroValue[T]类型是一个编译时的唯一一类持有的东西,可以有.value的调用它: http://www.scala-sbt.org/0.13.5/api/index.html#sbt.std.MacroValue.我们使用它来跟踪宏中的底层实例,并表示它们具有特殊意义(即我们必须重新编写代码,以便在使用之前等待值存在).sbt.Def对象具有一组implicits,称为macroValueXYZ将Initialize[_]实例提升到宏API中.所以,正如你所看到的,通过我们的内部实现它是一种黑魔法.我们必须研究一种在scaladoc工具中更好地记录API的方法.