有没有办法在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中,这将是一个外部变量,我认为将其作为一个全局变量就应该完成。
答案 0 :(得分:46)
您需要在每个要在其中共享的范围(即函数/工作空间)中将x
声明为global variable。因此,您需要将test1
写为:
function test1()
global x;
x = 5;
end
答案 1 :(得分:4)
使用全局变量引用您对gnovice的评论可能是一种解决您问题的方法,但它并不常用。
首先确保您的.m
文件是功能而不是脚本。 脚本共享一个公共工作区,可以轻松地不情愿地覆盖您的变量。相比之下,功能有其自己的范围。
使用xUnit为您的功能生成可重复的单元测试。通过测试程序中涉及的每个函数,您将跟踪错误源。进行单元测试后,可以轻松验证进一步的代码修改。
答案 2 :(得分:1)
绕过global
混乱的一种可能方法是将变量指定为appdata
。您可以使用函数setappdata
和getappdata
从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
而不是通用x
,y
会有所帮助。这适用于在MATLAB生产服务器上部署的已编译可执行文件和代码。