首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Def.app和KList映射任务的依赖关系

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

Stack Overflow用户
提问于 2014-01-06 13:09:04
回答 2查看 98关注 0票数 3

这个问题涉及到sbt 0.13从此承诺到KLists的实现。我想复制这种行为,因为KList实现改变了,它不再工作了。

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

编辑:以前,我想知道如何将klist转换为KL[M[_]]类型,这是Def.appAList.klist所期望的(后者是前者所需要的)。然后,我意识到可以通过以下方式将KList实例变成表单KL[M[_]]的类型构造函数

  • 显式地编写这样一个类型的构造函数,它抽象于更高的类型,M (正如Mark在他的回答中所指出的那样),或者
  • (我相信)通过直接访问所涉及的klist klkl类型。

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

有了这些资料,我的问题仍然是:

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

EN

回答 2

Stack Overflow用户

发布于 2014-01-06 13:24:01

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

代码语言:javascript
复制
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实例化它。

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

代码语言:javascript
复制
Def.app[kl.type#Transform, Task[String]](kl) { ... }
//                         ^~~~~~~~~~~~

在这里,我还必须提供我正在定义的这个设置的内部类型。

票数 1
EN

Stack Overflow用户

发布于 2014-01-06 14:11:01

Def.appAList和相关代码绝对不打算手动使用。用例是什么?

要回答这个问题,您要寻找的类似klist的类型构造函数是:

代码语言:javascript
复制
type KSS[M[_]] = KCons[String, KCons[String, KNil, M], M]

与原始的KList一样,它对应用于每个元素的类型构造函数M进行抽象。特别是,在示例中,它不应该应用于像SettingKey这样的类型构造函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20950743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档