在MATLAB中声明一个全局变量

时间:2011-02-06 06:12:59

标签: matlab global-variables

有没有办法在MATLAB中声明全局变量?

请不要回复:

global x y z;

因为我也可以阅读the help files

我已经声明了一个全局变量x,然后做了类似的事情:

function[x] = test()
    global x;
    test1();
end

函数test1()定义为:

function test1()
    x = 5;
end

当我运行test()时,我的输出为x = []。有没有办法让它输出x=5,或者我定义x在一个单独的函数中?在C中,这将是一个外部变量,我认为将其作为一个全局变量就应该完成。

3 个答案:

答案 0 :(得分:46)

您需要在每个要在其中共享的范围(即函数/工作空间)中将x声明为global variable。因此,您需要将test1写为:

function test1()
  global x;
  x = 5;
end

答案 1 :(得分:4)

使用全局变量引用您对gnovice的评论可能是一种解决您问题的方法,但它并不常用。

首先确保您的.m文件是功能而不是脚本脚本共享一个公共工作区,可以轻松地不情愿地覆盖您的变量。相比之下,功能有其自己的范围。

使用xUnit为您的功能生成可重复的单元测试。通过测试程序中涉及的每个函数,您将跟踪错误源。进行单元测试后,可以轻松验证进一步的代码修改。

答案 2 :(得分:1)

绕过global混乱的一种可能方法是将变量指定为appdata。您可以使用函数setappdatagetappdata从MATLAB窗口分配和检索appdata。只要MATLAB会话处于活动状态,就会出现一个由0表示的窗口。

>> setappdata(0,'x',10)  % 0 indicates the root MATLAB window

现在变量x对任何脚本或函数都不可见,但可以使用getappdata在任何需要的地方访问。

function test
    globalX = getappdata(0,'x');
    disp(globalX);
end

x =
    10

好消息是你可以将任何有效的MATLAB对象分配给appdata,只需对名称保持谨慎,使用appdata字段的唯一名称,如ModelOptimizerOptions而不是通用xy会有所帮助。这适用于在MATLAB生产服务器上部署的已编译可执行文件和代码。