有沒有更好的方法來實現複製構造函數爲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