将被调用函数的工作空间暴露给MATLAB中的调用函数



为了简单起见,我在应用程序中使用MATLAB脚本作为配置文件。通过这种方式,我可以使用函数run将所有变量加载到工作空间中。目前,每当我需要加载配置文件时,我都会写下面的代码。

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的功能+检查文件是否存在+如果文件不存在则自定义错误消息。

一些可能的(互斥的)方法:

  • 使函数将这些变量作为输出返回
  • 将这些变量声明为global
  • 使用脚本而不是函数。那可能是我的选择
  • 如果以上都不适合您的需求,您可以使用evalin。不过,这不是一个好的做法

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

load(userConfig(configFile))

在配置函数的定义中:

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

我假设字符串configFileuserConfig函数的input_args

我只是提供一个你可能想要的解决方案,尽管我不建议这样做。

最新更新