从另一个脚本修改脚本

时间:2013-06-03 18:44:20

标签: matlab

我有一个在循环内运行的脚本(每次迭代都会修改一些常量)。有没有办法在不修改.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

2 个答案:

答案 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
相关问题