当前位置:  开发笔记 > 编程语言 > 正文

Matlab拷贝构造函数

如何解决《Matlab拷贝构造函数》经验,为你挑选了2个好方法。

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

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

等等

谢谢,Dani



1> Navan..:

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

classdef YourClass < matlab.mixin.Copyable
...

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

此复制方法在不调用构造函数或设置属性函数的情况下创建副本.所以这应该更快.您还可以通过覆盖某些方法来自定义复制行为.



2> Mr Fooz..:

如果您想要一个快速而肮脏的解决方案,假设可以复制所有属性,请查看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.


在构造函数中,您应该在开始复制属性之前测试"rhs"类型为Foo(isa(rhs,'Foo')).
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有