1 つの入力でコンストラクターを追加し、そのプロパティを明示的にコピーする以外に、ハンドル派生クラスの matlab のコピー コンストラクターを実装するより良い方法はありますか?
obj.property1 = from.property1;
obj.property2 = from.property2;
等
ありがとう、ダニ
1 つの入力でコンストラクターを追加し、そのプロパティを明示的にコピーする以外に、ハンドル派生クラスの matlab のコピー コンストラクターを実装するより良い方法はありますか?
obj.property1 = from.property1;
obj.property2 = from.property2;
等
ありがとう、ダニ
matlab.mixin.Copyable を使用してハンドル オブジェクトのコピーを作成する簡単な方法がもう 1 つあります。このクラスから継承すると、すべてのプロパティをコピーする copy メソッドが得られます。
classdef YourClass < matlab.mixin.Copyable
...
a = YourClass;
b = copy(a); % b is a copy of a
このコピー メソッドは、コンストラクターを呼び出したり、プロパティの関数を設定したりせずにコピーを作成します。したがって、これはより高速になるはずです。一部のメソッドをオーバーライドして、コピーの動作をカスタマイズすることもできます。
すべてのプロパティをコピーできると仮定した簡単なソリューションが必要な場合は、PROPERTIES 関数をご覧ください。すべてのプロパティを自動的にコピーするクラスの例を次に示します。
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
そしていくつかのテストコード:
f = Foo(); [f.a Foo(f).a] % should print 2 floats with the same value.
使用することもできます
try
F.(fns{i}) = rhs.(fns{i});
end
これにより、メソッドがより便利になります