6

1 つの入力でコンストラクターを追加し、そのプロパティを明示的にコピーする以外に、ハンドル派生クラスの matlab のコピー コンストラクターを実装するより良い方法はありますか?

obj.property1 = from.property1;  
obj.property2 = from.property2;

ありがとう、ダニ

4

3 に答える 3

11

matlab.mixin.Copyable を使用してハンドル オブジェクトのコピーを作成する簡単な方法がもう 1 つあります。このクラスから継承すると、すべてのプロパティをコピーする copy メソッドが得られます。

classdef YourClass < matlab.mixin.Copyable
...

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

このコピー メソッドは、コンストラクターを呼び出したり、プロパティの関数を設定したりせずにコピーを作成します。したがって、これはより高速になるはずです。一部のメソッドをオーバーライドして、コピーの動作をカスタマイズすることもできます。

于 2013-04-23T13:28:58.997 に答える
8

すべてのプロパティをコピーできると仮定した簡単なソリューションが必要な場合は、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.
于 2008-10-29T19:25:33.497 に答える
2

使用することもできます

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

これにより、メソッドがより便利になります

于 2009-11-19T00:34:22.603 に答える