我希望我的编译任务依赖于相当昂贵的任务myTask
,但只应在自上次运行以来自定义指标发生变化时运行。假设我有一个函数myCriterion : State => String
,它返回我的自定义标准的规范表示。
理想情况下,我希望编译依赖于myTask onlyIf myCriterion changed
或类似的东西。我看到Tracked.inputChanged
和FilesInfo.*
周围的一堆内容似乎相关,但我找不到任何关于如何使用它们的说明。在幕后,我希望myTask
运行myCriterion
,如果它存在则检查磁盘上的缓存版本,如果它们匹配,则根本不执行任何操作。如果它们不匹配,我希望它运行myTask
的逻辑,然后将myCriterion
的当前输出写入缓存,这样我们下次不必要地执行任务(因为它每次只产生相同的输出)。无论myTask
是否变成nop,编译都应该明显发生。
答案 0 :(得分:0)
我想我已经弄明白了如何使用Tracked
来表达它的价值:如果我写Tracked.inputChanged(somePath) { case (changed, state: String) => if (changed) ... }
并将结果应用于String
(带Equiv[String]
1}}范围内的实例)然后它为我做了更改检查。我仍然对将任务与这种模式联系起来的惯用方法感到好奇。