gpt4 book ai didi

scala - 如何使用 Def.app 和 KList 映射任务的依赖关系

转载 作者:行者123 更新时间:2023-12-02 01:54:33 24 4
gpt4 key购买 nike

这个问题与 sbt 0.13 的 KLists 实现有关 this commit .我想复制 this behaviour ,自从 KList 实现更改后,它不再起作用。

目前的原因是,如果您将它们分组在一个元组中,sbt 最多只允许 11 个依赖项。我听说为什么它不允许更多的性能影响,所以我正在寻找使用元组并调用 RichTaskables.map 的替代方法,我正在考虑使用 KLists作为替代方案。

编辑:之前我想知道如何将 klist 转换成 KL[M[_]] 类型的东西,即 Def.appAList.klist 期望(后者是前者所需要的)。然后我意识到 KList 实例可以通过

变成 KL[M[_]] 形式的类型构造函数
  • 显式编写这样一个类型构造函数,它抽象出更高类型的类型,M(正如 Mark Harrah 在他的回答中指出的那样),或者
  • (我相信)通过直接访问有问题的 klist klkl.Transform 类型。

我尝试过使用 kl.Transform,如果所有依赖项都是设置或任务,它就可以工作,但如果它们是混合的,它就不会直接编译。

有了这些信息,我的问题仍然是:

我如何将一些 SettingKey 和 TaskKey 依赖项编写为 KList 并使用 Def.app 映射它们的值?我提到 Def.app 是因为我不知道更好、更高级的方法。

最佳答案

我已经想出一个方法让它工作,但我觉得它应该比那更优雅。回到我要复制的示例,具有相同行为的新代码如下所示:

lazy val yodawg = TaskKey[String]("yo-dawg", "I heard you liked settings, so I put a setting in your setting")

val kl = moduleName :^: version :^: isSnapshot :^: KNil

yodawg <<= Def.app(kl: kl.type#Transform[Def.Initialize]) {
case a :^: b :^: c :^: KNil => task(List(a, b, c).mkString("~"))
}(AList.klist)

但是:

  • 我必须显式传入AList.klist(可能是预期的,它似乎没有被定义为任何地方的隐式)
  • 我必须将 klist 保存在一个 val 中,并访问它的 Transform 内部类型,这实际上应该是 klist 的一个实现细节。此外,我也不得不使用 Def.Initialize 实例化它。

或者我可以在方括号中提供类型,但它看起来像:

Def.app[kl.type#Transform, Task[String]](kl) { ... }
// ^~~~~~~~~~~~

因为我必须提供我正在定义的此设置的内部类型。

关于scala - 如何使用 Def.app 和 KList 映射任务的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20950743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com