Ich habe ein seltsames Verhalten in MATLAB beim Deklarieren einer Objektvariable als global. Wo alle globalen Doppeldefinitionen, die ich definiere, durch Funktionen erkennbar sind, scheint es nicht möglich, dasselbe mit Objekten oder Strukturen von Objekten zu tun, die von einer Klasse definiert sind. Das habe ich getan.MATLAB OOP globale Objekte in Funktionen als leer
Klassendefinition:
classdef Class < handle
properties
property
end
methods
function obj = Constructor(value)
if nargin == 1
obj.property = value;
end
end
end
end
Bau der Objekte Array:
% 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
Jetzt möchte ich eine Funktion wie den Zugriff auf sowohl die Objekte Arrays und Variablen A, die beide oben definiert sind, und beide als globale Variablen deklariert. Wenn ich jedoch eine Funktion wie folgt aufbaut, ist nur die Variable A zugänglich, während das Objekt-Array als leere Variable betrachtet wird.
function varargout = doSomething (varargin)
global objectsArray variableA
aaa = variableA;
bbb = objcetsArray(1).property; <--- code crashes here
end
Der Code stürzt beim Ausführen der Anweisung ab, die bbb
definiert. Debug-Modus zeigt, dass objectsArray ist leer, und diese VariableA ist gleich ihrem Wert, 123. Beenden Debug-Modus, Beenden daher die Ausführung der Funktion, die ObjectsArray ist so definiert, wie ich es erwarten würde, als eine Struktur von 3 Objekten.
Meine Frage ist, warum passiert das? Warum scheint es möglich, globale Variablen aufzurufen, aber nicht, wenn sie als Objekte definiert sind?