Prima di tutto, è possibile verificare la nostra condizione con
validParam = isa(x,'Foo') || isempty(x);
Tuttavia, il modo migliore sarà quello di creare una classe vuota utilizzando il metodo statico empty
:
e = Foo.empty(0);
isa(x,'Foo')
E il risultato è :
isa (Foo.empty (0), 'Foo')
ans =
1
Tra l'altro, questo è utile anche per un altro caso - Si supponga di voler crescere in modo dinamico e array di oggetti Foo
. Potresti usare un array di celle, ma poi perdi il tipo di sicurezza. Invece, crea Foo.empty()
.
Tuttavia, vi è un cavalletto nell'utilizzo di questo metodo. Non è abbastanza intelligente da gestire l'ereditarietà -
Lasciare Bar
essere una classe che eredita da Foo
.
classdef Bar < Foo
end
E si alloca un nuovo array di oggetti Foo
:
x = Foo.empty(0)
x =
0x0 vuoto Foo senza proprietà.
Metodi
Quindi provare a aggiungere Bar
:
x(end+1) = Bar()
??? Si è verificato il seguente errore durante la conversione da Bar a Foo: Errore durante l'utilizzo di ==> Foo Troppi argomenti di input.
Quindi l'unico rimedio per questo caso è l'utilizzo di matrice di celle.
Edit (1): Sembra che Matlab hanno aggiunto un special class al fine di gestire l'eredità:
Descrizione
matlab.mixin.Heterogeneous è una classe astratta che fornisce supporto per la formazione di matrici eterogenee. Una matrice eterogenea è una matrice di oggetti che differiscono nella loro classe specifica, ma sono tutti derivati da o sono esempi di una classe radice. La classe radice deriva direttamente da matlab.mixin.Heterogeneous.