在MATLAB中声明一个全局variables
有没有办法在MATLAB中声明全局variables?
请不要回应:
global xyz;
因为我也可以阅读帮助文件 。
我已经声明了一个全局variablesx,然后做了这样的事情:
function[x] = test() global x; test1(); end
函数test1()
被定义为:
function test1() x = 5; end
当我运行test()
,我的输出是x = []
。 有没有一种方法,我可以使它输出x=5
,或任何我定义x
是在一个单独的function? 在C中,这将是一个外部variables,我认为使它成为一个全局variables应该完成这个…
您需要在每个范围(即函数/工作区)中将x
声明为全局variables ,而您希望它在其中共享。 所以,你需要写test1
为:
function test1() global x; x = 5; end
参考你对gnovice的评论,使用全局variables可以解决你的问题,但这不是一个常用的方法。
首先确保你的.m
文件是函数而不是脚本 。 脚本共享一个共同的工作空间,使其不容易覆盖你的variables。 相比之下,函数有自己的范围。
使用xUnit为您的函数生成可重复的unit testing。 通过testing程序中涉及的每个函数,您将追踪错误来源。 进行unit testing后,可以轻松validation进一步的代码修改。
解决global
混乱的一种可能的方法是将variables分配为appdata
。 你可以使用函数setappdata
和getappdata
从MATLAB窗口分配和检索appdata
。 只要MATLAB会话处于活动状态,就会有一个由0
表示的窗口。
>> setappdata(0,'x',10) % 0 indicates the root MATLAB window
现在,variablesx对任何脚本或函数都是不可见的,但可以通过使用getappdata
在需要的地方访问。
function test globalX = getappdata(0,'x'); disp(globalX); end x = 10
好消息是,你可以分配任何有效的MATLAB对象的应用程序数据,只是谨慎的名称,使用像ModelOptimizerOptions
而不是一个通用的x
字段的唯一名称, y
会有所帮助。 这也适用于在MATLAB生产服务器上部署的编译的可执行文件和代码。