【发布时间】:2017-04-06 09:22:50
【问题描述】:
在将对象变量声明为全局变量时,我在 MATLAB 中遇到了一个奇怪的行为。在我定义的所有全局双精度似乎都可以通过函数识别的情况下,似乎不可能对对象或从类定义的对象结构做同样的事情。这就是我所做的。
类定义:
classdef Class < handle
properties
property
end
methods
function obj = Constructor(value)
if nargin == 1
obj.property = value;
end
end
end
end
对象数组的构造:
% Define objects array as global variable to be accessible in functions
global objectsArray variableA
% define value of variable A, to be accessible in functions
variableA = 123;
% Values to be assigned to objects' property field
values = [1,2,3];
% initialise object array using constructor
if isempty(objectsArray)
objectsArray(3,1) = Constructor();
end
% define objects' property field
for k = 1:3
objectsArray(k) = Constructor( values(k) );
end
现在,我想要一个函数来访问上面定义的对象数组和变量 A,并且都声明为全局变量。但是,如果我按如下方式构建函数,则只能访问变量 A,而 objects 数组被视为 空变量。
function varargout = doSomething (varargin)
global objectsArray variableA
aaa = variableA;
bbb = objcetsArray(1).property; <--- code crashes here
end
代码在执行定义bbb 的指令时崩溃。调试模式显示 objectsArray 为空,variableA 等于其值 123。结束调试模式,因此退出函数的执行,objectsArray 被定义为我所期望的,作为 3 个对象的结构。
我的问题是,为什么会发生这种情况?为什么似乎可以调用全局变量,但如果它们被定义为对象则不行?
【问题讨论】:
标签: matlab function oop struct global-variables