1

我想让我的编译任务依赖于一个myTask相当昂贵的任务,但只有在自定义指标自上次运行以来发生变化时才应该运行。假设我有一个函数myCriterion : State => String,它返回我的自定义标准的规范表示。

理想情况下,我想编译依赖myTask onlyIf myCriterion changed或类似的东西。我看到一堆东西Tracked.inputChangedFilesInfo.*看起来很相关,但我找不到任何关于如何使用它们的迹象。在幕后,我想myTask运行myCriterion,检查它是否存在磁盘上的缓存版本,如果它们匹配,则什么都不做。如果它们不匹配,我希望它运行逻辑,myTask然后将当前输出写入myCriterion缓存,这样我们下次就不会不必要地执行任务(因为它每次只会产生相同的输出)。myTask无论是否变成 nop ,编译都应该发生。

4

1 回答 1

0

我想我已经弄清楚了如何使用Tracked,因为它的价值:如果我编写Tracked.inputChanged(somePath) { case (changed, state: String) => if (changed) ... }并将结果应用到 a String(具有Equiv[String]范围内的实例),那么它会为我进行更改检查。不过,我仍然对将任务与这种模式相关联的惯用方式感到好奇。

于 2013-04-20T22:20:33.400 回答