construtor de cópia Matlab
-
05-07-2019 - |
Pergunta
Existe uma maneira melhor para implementar cópia construcor para Matlab para uma alça derivada classe diferente de adicionar um construtor com uma entrada e explicitamente copiar suas propriedades?
obj.property1 = from.property1;
obj.property2 = from.property2;
etc.
Obrigado, Dani
Solução
Se você quer uma solução rápida e suja que assume todas as propriedades podem ser copiados, dê uma olhada na função PROPRIEDADES. Aqui está um exemplo de uma classe que copia automaticamente todas as propriedades:
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 um código de teste:
f = Foo(); [f.a Foo(f).a] % should print 2 floats with the same value.
Outras dicas
Há uma outra maneira fácil de criar cópias de objetos punho usando matlab.mixin.Copyable. Se você herdar desta classe que você vai ter um método de cópia que irá copiar todas as propriedades para você.
classdef YourClass < matlab.mixin.Copyable
...
a = YourClass;
b = copy(a); % b is a copy of a
Este método de cópia cria uma cópia sem chamar construtores ou funções conjunto de propriedades. Portanto, este deve ser mais rápido. Você também pode personalizar o comportamento de cópia, substituindo alguns métodos.
Você ainda pode usar
try
F.(fns{i}) = rhs.(fns{i});
end
que torna o método mais útil