使用一个结构作为一个全局变量

126(30天)
丹尼尔
丹尼尔 2017年9月7日
编辑: 阿明丫2019年9月17日
我想使用一个结构作为一个全局变量。这段代码是函数的一个例子:
函数setGlobalx ()
全球measBuff
measBuff(1:6) =结构(“timeUtc”,1“timePeakOff”2,“高峰”3,“的意思是”4“eventT”5);%初始化结构
如果我叫它使用:
setGlobalx
全球measBuff
显示器(measBuff)
我得到一个错误的3号线功能:
错误发生后将从结构到双:
错误使用双
转换从结构是不可能翻倍。
错误在setGlobalx(3号线)
measBuff(1:6) =结构(“timeUtc”,1“timePeakOff”2,“高峰”3,“的意思是”4“eventT”5);%初始化结构
错误在Untitled7(3号线)
setGlobalx
然而,如果我改变的函数:
函数setGlobalx2 ()
measBuff(1:6) =结构(“timeUtc”,1“timePeakOff”2,“高峰”3,“的意思是”4“eventT”5);%初始化结构
全球x
x = measBuff
和运行
%调用函数在全局变量x
setGlobalx2
全球x
显示(x);
我得到没有错误和结构x是全球性的。
谁能告诉我为什么第一种方法不工作吗?谢谢。

接受的答案

斯蒂芬。
斯蒂芬。 2017年9月7日
编辑:斯蒂芬。 2017年9月7日
不要使用全局变量。
你可以避免整个问题,不使用全局变量。仅仅因为一些初学者喜欢使用全局变量不使他们的好方法代码:它使调试非常困难,产生错误,非常不透明。避免全局变量,仅仅通过使用的任何数据 首选 推荐的 方法给出了MATLAB文档:传递参数,嵌套函数,等等。
在任何情况下,你的错误很容易算出,一旦你阅读 全球 文档,明确指出 “如果全局变量不存在第一次问题全球声明,它被初始化为一个空0 x0矩阵。”
在你的第一个函数全球并不存在 在你宣布它是全球性的 ,然后用MATLAB创建一个空矩阵(默认的类双)。显然没有空矩阵元素1到6,和不是一个结构,所以你试图迫使结构是一个错误。所以,你基本上是这样做:
> > = [];
> >(1:6)=结构(“x”,1)
? ? ?的错误发生后将从结构到双:
错误使用= = >翻倍
转换从结构是不可能翻倍。
解决方案?避免使用全局变量。通过您的数据正确。

答案(1)

阿明丫
阿明丫 2019年9月17日
编辑:阿明丫 2019年9月17日
不使用全局变量并不总是可能的!如在应用程序设计师当你需要存取一个工作空间变量。但是您可以使用
evalin (“基地”,“structureName”)
从工作空间,访问一个结构
assignin (“基地”,“structureName”、价值);
保存工作空间。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!