我有一个在循环内运行的脚本(每次迭代都会修改一些常量)。有没有办法在不修改.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
答案 0 :(得分: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
参数(在主循环中设置(每三次迭代))会影响是否在脚本中执行第3行(B=B*2
)。
答案 1 :(得分: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