我有一个相当庞大的程序,我已经从MATLAB命令行作为脚本运行了。我决定使用一些嵌套函数清理它(我需要将所有内容保存在一个文件中),但为了使它能够工作,它还要求我使程序本身成为一个函数。因此,程序不再像在脚本中那样在基础工作区中运行。这意味着我无法再访问程序运行后过去保留的许多有用变量,这对于额外的计算和运行信息非常重要。
我可以找到的建议解决方法是使用assignin
,evalin
,将变量定义为全局变量,或者在现在功能化程序的定义中设置输出。然而,这些解决方案都没有吸引我,我真的想找到一种方法来强制工作区本身。有没有这样的解决方法?或者有没有其他方法可以做到这一点,并不要求我手动定义或标记我想要离开函数的每个特定变量?
答案 0 :(得分:2)
函数应该明确定义输入和输出变量。以不同方式组织代码将更难以理解和稍后修改。最后,与投资一些重组相比,最有可能花费你更多的时间来处理非正统的风格。
如果您有大量的输出变量,我建议在structure arrays中组织它们,这可能很容易作为输出变量处理。
我能想象的唯一不整洁的解决方法是使用whos,assignin和eval:
function your_function()
x = 'hello' ;
y = 'world' ;
variables = whos ;
for k=1:length(variables)
assignin('base',variables(k).name,eval(variables(k).name))
end
end
但我怀疑这有助于清理你的计划。如上所述,我建议在结构中手动订购:
function out = your_function()
x = 'hello' ;
y = 'world' ;
out.x = x ;
out.y = y ;
end
答案 1 :(得分:0)
如果您要定义的函数很简单并且只有一个输出,则可以使用anonymous functions。
另一种选择是在struct
中存储您想要使用的所有变量,并让您的大函数将此struct
作为输出返回。
function AllVariables = GlobalFunction(varargin);
% bunch of stuff
AllVariables= struct('Variable1', Variable1, 'Variable2', Variable2, …);
end