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

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

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

最佳答案 函数应明确定义输入和输出变量.以不同方式组织代码将更难以理解和稍后修改.最后,与投资一些重组相比,最有可能花费你更多的时间来处理非正统的风格.

如果您有大量的输出变量,我建议在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
点赞