【问题标题】:Expose workspace of a called function to calling function in MATLAB将被调用函数的工作区暴露给 MATLAB 中的调用函数
【发布时间】:2014-09-01 14:36:47
【问题描述】:

为了简单起见,我在我的应用程序中使用 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 的功能 + 检查文件是否存在 + 如果文件不存在则自定义错误消息。

【问题讨论】:

    标签: matlab configuration-files


    【解决方案1】:

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

    • 使函数将这些变量作为输出返回。
    • 将这些变量声明为global
    • 使用脚本而不是函数。那可能是我的选择。
    • 如果以上都不能满足您的需求,您可以使用evalinNot good practice,不过。

    【讨论】:

    • Globals 在not good practice 方面就在那里,除非在非常特殊的情况下,就像eval。这可能是其中一种情况。另一种选择是使用OOP 将所有代码重写为一个类。
    • @horchler 感谢您的链接。我不知道全局变量被认为是一种糟糕的做法,尽管它们显然把事情搞砸了
    【解决方案2】:

    您可以将本地工作区中的数据保存到.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 是你的 input_args 函数的 input_args

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

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多