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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top