6

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

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

myTask <<= (foo, bar) flatMap { (x, y) => someFunctionProducingATask(x, y, 5) }

现在,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[...]
}

Initialize感觉很单调,但我找不到pure它,所以我不知道如何将我的任务投入其中,或者这是否是可取的。除了建议我使用taskDyn. 有人在这里有什么想法吗?

4

1 回答 1

4

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

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

pure因为InitializeDef.value(接受=> T)或Def.pure(接受() => T)。

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

于 2013-07-28T00:34:29.847 回答