我正在升级我的构建以尽可能多地使用新的宏语法,并且遇到了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
感觉是monadic,但我找不到pure
,所以我不知道如何将我的任务放入其中,或者甚至是可取的。除了建议我使用taskDyn
之外,文档似乎没有说什么。任何人有任何想法吗?
答案 0 :(得分:4)
在大多数面向用户的文档中,"task"
表示Initialize[Task[T]]
。作为构建和插件的"task"
通常使用它们实际上是一个值为任务的设置。
someFunctionProducatATask
可能应该返回Initialize[Task[T]]
。
pure
的{p> Initialize
为Def.value
(接受=> T
)或Def.pure
(接受() => T
)。
但是,通常只需使用Def.task
(适用于Initialize[Task[T]]
)和Def.setting
(适用于Initialize[T]
。这些语法与:=
的参数具有相同的语法, +=
和++=
。