Constructor de copias matlab
-
05-07-2019 - |
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
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