将函数工作空间设置为基于MATLAB

时间:2014-08-06 19:23:07

标签: matlab function scope global workspace

我有一个相当庞大的程序,我已经从MATLAB命令行作为脚本运行了。我决定使用一些嵌套函数清理它(我需要将所有内容保存在一个文件中),但为了使它能够工作,它还要求我使程序本身成为一个函数。因此,程序不再像在脚本中那样在基础工作区中运行。这意味着我无法再访问程序运行后过去保留的许多有用变量,这对于额外的计算和运行信息非常重要。

我可以找到的建议解决方法是使用assigninevalin,将变量定义为全局变量,或者在现在功能化程序的定义中设置输出。然而,这些解决方案都没有吸引我,我真的想找到一种方法来强制工作区本身。有没有这样的解决方法?或者有没有其他方法可以做到这一点,并不要求我手动定义或标记我想要离开函数的每个特定变量?

2 个答案:

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