sbt 0.13任务宏等效于flatMap

Mys*_*Dan 6 scala sbt

我正在升级我的构建以尽可能多地使用新的宏语法,我遇到了一个flatMap我不知道如何处理的问题.

假设我曾经有过以下形式的任务

myTask <<= (foo, bar) flatMap { (x, y) => someFunctionProducingATask(x, y, 5) }
Run Code Online (Sandbox Code Playgroud)

现在,Def.taskDyn看起来模糊不清,但不太合适.将它翻译成天真的东西是行不通的:

myTask <<= Def.taskDyn {
  val x = foo.value
  val y = bar.value
  someFunctionProducingATask(x, y, 5) // ERROR: we need an Initialize[Task[...]], but have a Task[...]
}
Run Code Online (Sandbox Code Playgroud)

Initialize感觉monadic但我找不到pure它,所以我不知道如何把我的任务放入其中,或者如果这甚至是可取的.除了暗示我使用之外,文档似乎没有说什么taskDyn.有人有任何想法吗?

Mar*_*rah 4

在大多数面向用户的文档中,"task"意味着Initialize[Task[T]]. 构建"task"和插件通常使用它们实际上是一个其值是任务的设置。

应该someFunctionProducatATask会返回Initialize[Task[T]]

pureforInitializeDef.value(接受=> T)或Def.pure(接受() => T)。

但是,通常只使用Def.task(for Initialize[Task[T]]) 和Def.setting(for Initialize[T]。它们允许与:=+=和 的参数使用相同的语法++=