Matlab Copykonstruktor
-
05-07-2019 - |
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 implementierenobj.property1 = from.property1;
obj.property2 = from.property2;
etc.
Danke, Dani
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