在函数或宏中,我经常需要特定的SetOverwrite行为。但是,我宁愿自己清理这些子程序(不要在堆栈上保留非返回值,保持OutPath不变,不更改全局状态等),这样我就不必复制设置流每次我想做某事时都会使用命令,以使代码更具可读性。
是否有一种方法可以通过SetOverwrite
完成?我可以“检测”,保存并以某种方式还原它吗?
我看不到GetOverwrite
函数。尽管我找不到确切的确切引用,但SetOverwrite文档引用了“覆盖标志”。有什么办法可以获取此(或任意)标志的值?
答案 0 :(得分:1)
不,您没有可以与之互动的标志。有一组可由插件控制的标志,但是覆盖模式不是其中之一。
我认为覆盖模式与(((a + b) = b) + a))
指令相互作用,因此具有一些编译时限制。
您唯一可以做的就是
File
${If} $something = "whatever"
SetOverwrite on
File "foo.txt"
${Else}
SetOverwrite ifnewer
File "foo.txt"
${EndIf}
适用于脚本后面的所有其他SetOverwrite
指令,因此很遗憾无法推送/弹出其状态。
从文档中:
4.8.2编译器标志
以下命令影响编译器生成代码和压缩数据的方式。除非另有说明,否则这些命令在脚本中的任何位置均有效,并且会影响放置每个命令的位置下面的每一行(直到被另一条命令覆盖)。不能使用流控制指令来跳过它们。