Frage

Gibt es eine bessere Art und Weise Kopie construcor für Matlab für einen Griff abgeleiteten Klasse andere als Zugabe einen Konstruktor mit einem Eingang und explizit das Kopieren seiner Eigenschaften?

zu implementieren
obj.property1 = from.property1;  
obj.property2 = from.property2;

etc.

Danke, Dani

War es hilfreich?

Lösung

Wenn Sie eine schnelle und unsaubere Lösung wollen, dass alle Eigenschaften annimmt, kopiert werden können, werfen Sie einen Blick auf die Funktionseigenschaften. Hier ist ein Beispiel einer Klasse, die automatisch Kopien aller Eigenschaften:

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

und einige Testcode:

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

Andere Tipps

Es ist eine weitere einfache Möglichkeit, Kopien von Griff Objekten zu erstellen, indem matlab.mixin.Copyable verwenden. Wenn Sie von dieser Klasse erben eine Kopie Methode erhalten, die alle Eigenschaften für Sie kopiert.

classdef YourClass < matlab.mixin.Copyable
...

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

Diese Kopiermethode erstellt eine Kopie ohne Konstrukteuren oder Set-Funktionen von Eigenschaften aufrufen. So sollte dies schneller sein. Sie können auch durch zwingende einige Methoden, um das Kopierverhalten anpassen.

Sie können sogar verwenden

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

, die das Verfahren nützlich

machen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top