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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top