我在MATLAB中將一個對象變量聲明爲全局時遇到了奇怪的行爲。在我定義的所有全局雙打似乎都可以被函數識別的地方,似乎不可能對類或對象的結構做類似的定義。這就是我所做的。在函數中看到的MATLAB OOP全局對象爲空
類定義:
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是空的,並且該變量A等於它的值123.結束調試模式,退出,因此函數的執行,objectsArray被定義爲我所期望的,作爲3個對象的結構。
我的問題是,爲什麼會發生這種情況?爲什麼回顧全局變量似乎是可能的,但是如果它們被定義爲對象則不可能?