1

我有一个在循环内运行的脚本(每次迭代都会修改一些常量)。有没有办法在不修改 .m 文件的情况下注释掉一行脚本?

更新: 根据 Floris 和 Matthew Simoneau 的回答,我创建了一个函数来尝试做同样的事情(并且它有效)。skipLineParameter 是一个引用基本工作区变量的字符串,其值为 0(不要跳过)或 1(跳过):

function skipline(skipLineParameter, parameter, default)
    try
        a = evalin('base', skipLineParameter);
        if ~a
            assignin('base', parameter, default);
        end
    catch
        assignin('base', parameter, default);
    end
end
4

2 回答 2

2

这是一种可能的方法 - 使用在主程序中设置的条件来决定是否执行脚本中的特定行。

如果你的主程序是

for ii = 1:9
  skipLine3 = (mod(ii,3)==0);
  runSub
end

runSub.m看起来像这样:

A = 1;
B = 2;
% modified lines to trap condition where 'skipLine3' doesn't exist:
if ~exist('skipLine3', 'var') skipMe = false; else skipMe = skipLine3; end
if ~skipMe, B=B*2; end
fprintf(1, "for iteration %d B is %d\n", ii, B)

然后输出将是:

for iteration 1 B is 4
for iteration 2 B is 4
for iteration 3 B is 2
for iteration 4 B is 4
for iteration 5 B is 4
for iteration 6 B is 2
for iteration 7 B is 4
for iteration 8 B is 4
for iteration 9 B is 2

如您所见 -skipLine3在主循环(每三次迭代)中设置的参数会影响B=B*2脚本中是否执行第 3 行 ( )。

于 2013-06-03T18:53:09.403 回答
1

我认为您正在寻找的是一个function。下面是如何将 runSub 变成一个函数:

function runSub(ii,skip)
A = 1;
B = 2;
if ~skip, B=B*2; end
fprintf(1, 'for iteration %d B is %d\n', ii, B);

您可以像这样在循环中访问它:

for ii = 1:9
    skipLine3 = (mod(ii,3)==0);
    runSub(ii,skipLine3)
end
于 2013-06-03T19:02:53.810 回答