gpt4 book ai didi

scala - 将输入任务与 sbt 中的动态任务相结合

转载 作者:行者123 更新时间:2023-12-04 15:11:09 25 4
gpt4 key购买 nike

我想做一个输入任务来处理用户输入并生成一堆子任务来运行。这是示例:

import sbt._
import Keys._
import Def.Initialize
import complete.DefaultParsers._

object TestBuild extends Build {
val sampleInput = inputKey[Seq[String]]("sample dynamic input task")
val sampleDynamic = taskKey[Seq[String]]("sample dynamic task")

override lazy val settings = super.settings ++ Seq(
sampleDynamic := Def.taskDyn {
val sources = Seq("ab", "csd", "efda")
sources.map(sampleTaskFor _).joinWith(_.join)
}.value,
sampleInput := Def.inputTaskDyn {
val sources = spaceDelimited("<arg>").parsed
sources.map(sampleTaskFor _).joinWith(_.join)
}.value
)

private def sampleTaskFor(source : String) : Initialize[Task[String]] = Def.task {
source + " : " + source
}
}

有两个样本。第一个工作并显示带有预定义输入的简单 taskDyn。第二个是带有用户输入的动态任务,拒绝编译,我无法解释的错误
[error] home/project/build.scala:15: Illegal dynamic reference: Def
[error] sampleInput := Def.inputTaskDyn {
[error] ^
[error] one error found
[error] (compile:compile) Compilation failed

我怎样才能避免它?

试错日志

在那里,我会用不同的建议更改附加我的问题,但仍然无法解决问题

用 InputTask.evaluate 替换 InputTask.value
      sources.map(sampleTaskFor _).joinWith(_.join)
- }.value
+ }.evaluated
)

如果我能够定义正确的 InputTask,它应该通过 evaluated 访问。方法,正如我在尝试使用编译的不同 InputTasks 后在文档和实践中发现的那样。

仍然无法解决 sbt 宏引擎拒绝提供的问题 inputTaskDyn .

等待其他建议

最佳答案

试错法给了我答案,但没有一点理解。这里是:

import sbt._
import Keys._
import Def.Initialize
import complete.DefaultParsers._

object TestBuild extends Build {
val sampleInput = inputKey[Seq[String]]("sample dynamic input task")
val sampleDynamic = taskKey[Seq[String]]("sample dynamic task")

override lazy val settings = super.settings ++ Seq(
sampleDynamic := Def.taskDyn {
val sources = Seq("ab", "csd", "efda")
sources.map(sampleTaskFor _).joinWith(_.join)
}.value,
sampleInput := Def.inputTaskDyn {
val sources = spaceDelimited("<arg>").parsed
sampleTaskAll(sources)
}.evaluated
)

private def sampleTaskFor(source : String) : Initialize[Task[String]] = Def.task {
source + " : " + source
}

private def sampleTaskAll(sources : Seq[String]) : Initialize[Task[Seq[String]]] = Def.taskDyn {
sources.map(sampleTaskFor _).joinWith(_.join)
}
}

出于某种原因,我无法理解您应该在单独的方法中按照单个任务的顺序隔离创建多任务。

关于scala - 将输入任务与 sbt 中的动态任务相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23929876/

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