Pregunta

¿Hay una mejor manera de implementar la construcción de copia para matlab para una clase derivada de manejador que no sea agregar un constructor con una entrada y copiar explícitamente sus propiedades?

obj.property1 = from.property1;  
obj.property2 = from.property2;

etc.

Gracias, Dani

¿Fue útil?

Solución

Si desea una solución rápida y sucia que suponga que se pueden copiar todas las propiedades, eche un vistazo a la función PROPIEDADES. Aquí hay un ejemplo de una clase que copia automáticamente todas las propiedades:

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

y algunos códigos de prueba:

f = Foo(); [f.a Foo(f).a] % should print 2 floats with the same value.

Otros consejos

Hay otra forma fácil de crear copias de objetos de manejo utilizando matlab.mixin.Copyable. Si hereda de esta clase, obtendrá un método de copia que copiará todas las propiedades para usted.

classdef YourClass < matlab.mixin.Copyable
...

a = YourClass;
b = copy(a); % b is a copy of a

Este método de copia crea una copia sin llamar a constructores o establecer funciones de propiedades. Así que esto debería ser más rápido. También puede personalizar el comportamiento de copia anulando algunos métodos.

Incluso puedes usar

try
 F.(fns{i}) = rhs.(fns{i});
end

lo que hace que el método sea más útil

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top