Die Sprache unterstützt dies eigentlich nicht wirklich, es gibt mehrere Lösungen (oder Workarounds).
Replikation des ersten Falls
Wenn das erste Element in das Array eingefügt wird, können Sie das gesamte Array mit diesem Element füllen, um eine Vorabzuweisung zu erreichen. Dies mag sehr schlecht aussehen, aber es ist tatsächlich die schnellste Möglichkeit, die mir bekannt ist.
for ii=1:S
%Annahme: e ist ein Skalar, sonst ist der Code völlig durcheinander
e=block(....)
if ii==1
%zur Vorabzuweisung, füllen Sie es mit Ihrem ersten Element
blockArray(1:S)=e
else
blockArray(ii)=e
end
end
Verwenden von Zellenarrays
Eine offensichtlich einfache Lösung, Sie können jede Klasse in die Felder einfügen
blockArray=cell(S,1);
for ii=1:S
%Annahme: e ist ein Skalar, sonst ist der Code völlig durcheinander
e=block(....)
blockArray{ii}=e
end
Diese Lösung ist sehr einfach, aber langsamer als die erste. Sie verlieren auch einige Funktionen, die für Zellenarrays nicht verfügbar sind
Lassen Sie Ihre Klasse Array-Funktionalität implementieren
classdef A
properties
arg1
out
end
methods
function obj = A(varargin)
if nargin==0
%Null-Objektkonstruktor
elseif strcmpi(varargin{1},'createarray')
sz=varargin(2:end);
%Vorabzuweisung
obj(sz{:})=A;
else
%Standardkonstruktor
obj.arg1=varargin{1};
obj.out=[1 2 3;];
end
end
end
end
Ein Konstruktor ohne Eingabeparameter erstellt ein "leeres" oder "null" Objekt, dies wird verwendet, um vorab zu zuweisen, also sollte es leer sein. Ein Konstruktor mit dem ersten Parameter makearray
erstellt ein Array Ansonsten sollte Ihr Konstruktor aufgerufen werden.
Verwendung:
%Erstellen Sie ein leeres Objekt
A
%Erstellen eines Arrays der Größe 2,3,4
A('createarray',2,3,4)
%Verwenden Sie den Standardkonstruktor
A(2)
Der größte Nachteil ist, dass Sie Ihre Klassen anpassen müssen. Diese Lösung wurde nie getestet, aber sie sollte in der Leistung der ersten nah kommen.