6

除了添加带有一个输入的构造函数并显式复制其属性之外,是否有更好的方法来为句柄派生类实现 matlab 的复制构造?

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

等等

谢谢,丹妮

4

3 回答 3

11

还有另一种简单的方法是使用 matlab.mixin.Copyable 创建句柄对象的副本。如果您从此类继承,您将获得一个复制方法,该方法将为您复制所有属性。

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 回答