Costruttore di copie Matlab
-
05-07-2019 - |
Domanda
Esiste un modo migliore per implementare il costruttore di copie per matlab per una classe derivata da handle oltre all'aggiunta di un costruttore con un input e alla copia esplicita delle sue proprietà?
obj.property1 = from.property1;
obj.property2 = from.property2;
ecc.
Grazie, Dani
Soluzione
Se vuoi una soluzione rapida e sporca che presupponga che tutte le proprietà possano essere copiate, dai un'occhiata alla funzione PROPERTIES. Ecco un esempio di una classe che copia automaticamente tutte le proprietà:
classdef Foo < handle
properties
a = 1;
end
methods
function F=Foo(rhs)
if nargin==0
% default constructor
F.a = rand(1);
else
% copy constructor
fns = properties(rhs);
for i=1:length(fns)
F.(fns{i}) = rhs.(fns{i});
end
end
end
end
end
e un po 'di codice di prova:
f = Foo(); [f.a Foo(f).a] % should print 2 floats with the same value.
Altri suggerimenti
Esiste un altro modo semplice per creare copie di oggetti handle usando matlab.mixin.Copyable. Se erediti da questa classe otterrai un metodo di copia che copierà tutte le proprietà per te.
classdef YourClass < matlab.mixin.Copyable
...
a = YourClass;
b = copy(a); % b is a copy of a
Questo metodo di copia crea una copia senza chiamare costruttori o impostare funzioni di proprietà. Quindi questo dovrebbe essere più veloce. Puoi anche personalizzare il comportamento della copia sovrascrivendo alcuni metodi.
Puoi persino usare
try
F.(fns{i}) = rhs.(fns{i});
end
che rende il metodo più utile