2014-09-01 75 views
1

为了简单起见,我在我的应用程序中使用了MATLAB脚本作为配置文件。这样我可以使用功能run将所有变量加载到工作区中。目前我正在编写下面的代码,每次我需要加载一个配置文件。将被调用函数的工作区公开为调用MATLAB中的函数

configFile = [APP.PROJECT_DIR '/config/app.m']; 
    if exist(configFile, 'file') ~= 2 
     error('Missing configuration file for APP: [PROJECT ROOT DIR]/configFile/app.m') 
    end 
    run(configFile); 

为了减少行数,我想将上面的代码放在独立的函数中。但是,如果我这样做,配置文件中的变量将被加载到该函数中,而不是加载到调用函数中。我怎样才能设法将调用函数的工作区公开到调用函数的工作区?

基本上我想要的是run +文件existince +如果文件不存在,自定义错误消息支票的功能。

回答

2

一些可能的互斥方法:

  • 使函数返回的变量为输出。
  • 声明这些变量为global
  • 使用脚本代替函数。这可能是我的选择。
  • 如果以上都没有适合您的需求,你可以使用evalinNot good practice,但。
+0

全局有权利在那里来讲[不](http://stackoverflow.com/questions/7888899/global-could-be-very-inefficient)[好](http://www.mathworks.com/matlabcentral/answers/51946-systematic-do-use-use-global-don-t-use-eval)[practice](http://blogs.mathworks.com/videos/2010/03/08/top-10 -matlab-code-practices-that-make-me-cry /),除非是非常特殊的情况,就像'eval'一样。这可能是其中的一种情况。另一种选择是使用[OOP](http://www.mathworks.com/help/matlab/object-oriented-programming.html)将所有代码重新编写为类。 – horchler 2014-09-01 15:13:09

+0

@horchler感谢您的链接。我不知道全局变量被认为是如此糟糕的做法,虽然他们显然搞砸了 – 2014-09-01 15:31:32

1

您可以将本地工作区中的数据保存到.mat文件中,并返回mat文件名作为定义函数的输出。然后在呼叫功能中使用load函数。下面给出了提示:

load(userConfig(configFile)) 

在你的配置功能的定义:

function output_args = userConfig(input_args) 
... 
run(input_args) 
output_args = [input_args,'at']; 
save(output_args) 
end 

我想串configFile是你的userConfig功能input_args

我只是privide,你可以想办法解决,即使我不建议。