有没有更好的方法来实现复制构造函数为matlab的句柄派生类,而不是添加一个输入的构造函数并明确复制其属性?Matlab复制构造函数
obj.property1 = from.property1;
obj.property2 = from.property2;
等
感谢, 达尼
有没有更好的方法来实现复制构造函数为matlab的句柄派生类,而不是添加一个输入的构造函数并明确复制其属性?Matlab复制构造函数
obj.property1 = from.property1;
obj.property2 = from.property2;
等
感谢, 达尼
如果你想快速和肮脏的解决方案,假设所有的属性可以被复制,看一看的属性功能。下面是一个类的实例,可以自动将所有的属性:
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
这使得该方法更实用
通过使用matlab.mixin.Copyable还有另一种简单的方法来创建句柄对象的副本。如果你从这个类继承,你会得到一个复制方法,它会复制你所有的属性。
classdef YourClass < matlab.mixin.Copyable
...
a = YourClass;
b = copy(a); % b is a copy of a
此复制方法创建副本,但不调用构造函数或设置属性的函数。所以这应该会更快。您也可以通过重写某些方法来自定义复制行为。
你能详细点吗?您使用的是什么版本的Matlab? – Azim 2008-10-29 16:24:45
我使用的是Matlab 2008a,而且我大多使用类的引用(因此从句柄派生),但有时我需要通过值来传递它们,例如, classdef请求<处理 性质 价格 量 端 端 – Dani 2008-10-29 16:43:06
classdef RequestManager <处理 性质 requestsHistory 端 方法 功能的handleRequest(此,请求) this.requestsHistory = [this.requestsHistory请求]; 结束 结束 结束 – Dani 2008-10-29 16:46:40