gpt4 book ai didi

haskell - 如何跳过摇动 Action ?

转载 作者:行者123 更新时间:2023-12-02 01:21:57 25 4
gpt4 key购买 nike

我想用shake下载一堆网页,然后对它们做一些处理。然而,我也想要在 shake 之外下载页面的选项,告诉 shake 我已经这样做了,然后让 shake 继续执行剩余的处理步骤。现在我正在执行第二步,“告诉 shake 我已经为它做了一些工作”。

举一个最小的例子,这是一个非常短的摇动脚本:

import Development.Shake

main = shakeArgs shakeOptions $ do
want ["test.txt"]
"test.txt" %> \_ -> liftIO (putStrLn "yikes!")

我想找到一种方法来防止此脚本打印 yikes!(但仍会更新 test.txt 的数据库条目)。使用 --help 运行它,我看到了部分内容:

--touch                     Assume targets are clean.

这听起来很有希望。然而:

% rm -r .shake && ./test --touch
yikes!
Build completed in 0:01m

也许它需要一个明确的文件列表来标记为新文件?

% rm -r .shake && ./test --touch test.txt
yikes!
Build completed in 0:01m

好的。那么,--help 也列出了这个:

-o FILE, --old-file=FILE, --assume-old=FILE
Consider FILE to be very old and don't remake it.

我觉得这有点令人费解:我们现在有一个“干净/肮脏”的比喻和一个“旧/新”的比喻,但不清楚它们是否相关。此外,如果文件是旧的,那肯定意味着我们想要重新制作它,对吗?无论如何,它似乎没有做我想做的事:

% rm -r .shake && ./test -o test.txt
yikes!
Build completed in 0:01m

好吧...好吧,也许这个选项与那个选项完全相反,会做我想做的事:

-W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
Consider FILE to be infinitely new.

没有骰子:

% r .shake && ./test -W test.txt
yikes!
Build completed in 0:01m

这给我留下了几个问题:

  • 最重要的是:我如何才能要求 shake just 更新其 test.txt 的数据库条目,而无需运行与 关联的 Action >test.txt?
  • --touch 有什么作用,为什么没有帮助?
  • -o/-W 做了什么,为什么没有帮助?
  • 旧/新和干净/脏之间的关系是什么?

最佳答案

混合隐喻的观察是正确的,也是问题的一部分。在当前发布的 Shake 版本中,标志取自 Make,它与 Shake 具有不同的语义,因此映射很差。在当前的 Shake HEAD 版本中,它已被重写并且更加简单 - 但现在让我们关注已发布的版本。

在 Shake 0.15(当前发布的版本)中,如果 Shake 之前成功运行过规则,则只能跳过该规则。因此,当您rm Shake 数据库时,Shake 无法跳过测试执行的规则,因为它以前从未运行过。

在 Shake 0.16 出现之前,一个可靠而简单的选择是向您的构建系统添加一个标志,该标志的存在会跳过所有下载 - 因此 Shake 仍然运行该规则,但该规则的效果是空操作。

关于haskell - 如何跳过摇动 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39605371/

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