Matlab / Simulink:递归函数失败(可能是作用域问题?)

时间:2012-06-26 11:55:16

标签: matlab recursion scope

在Matlab / Simulink中,我试图通过inports和相应的From - 父块中的块来替换非虚拟子系统中的所有From - 块。我想出了一个递归检查系统是否包含子系统的函数,如果是,则将其自身应用于每个子系统。如果不是(边缘条件),它检查系统是否是非虚拟的,在这种情况下替换From - 块(如果有的话)。代码:

function void = replace_FROM_blocks_in_system(system)
    subsystems = find_system(system,'blocktype','SubSystem')
    if (length(subsystems) > 1)
        for subsys = subsystems
            replace_FROM_blocks_in_system(subsys);
        end
    else
        if strcmp('off', get_param(system,'IsSubsystemVirtual'))
            #% code to replace all from-blocks
        else
            return;
        end
    end
end

length(subsystems) > 1是因为find_system(system,'blocktype','SubSystem')(奇怪地)除了可能的子系统之外还发现system本身。

当使用包含两个子系统作为参数的系统启动该函数时,它永远不会到达函数的else部分并达到递归限制。我认为Matlab使变量system全局可见,从而阻止函数像它应该的那样工作。有没有办法明确禁止Matlab这样做,就像它为R建议的那样 here? (或许我在这里错过了其他的东西。)

0 个答案:

没有答案