2017-09-15 78 views
5

我正在寫一個Matlab腳本,其中有一堆相同的自定義類的對象,如ABC。然後我有一個可以在任何兩個對象上工作的函數,如func(A,B)如何在Matlab中創建一個指向對象的指針數組?

現在我想通過所有其他對象選擇一個對象,如A,然後func(A,x)。所以基本上實現類似:

func(A,B) 
func(A,C) 
A.update() 

func(B,A) 
func(B,C) 
B.update() 

... 

所以我需要創建的所有對象我可以遍歷數組,而本身不計,當然。我試着用單元陣列做到這一點,所以我有:

AllObjs = {A,B,C} 
for i=1:length(AllObjs) 
    if ~isequal(A, AllObjs{i}) 
    func(A, AllObjs{i}) 
    end 
end 
A.update() 

然而,當A被更新,在AllObjsA沒有得到更新。所以對於下一個循環,我必須創建一個包含所有對象的新數組。在這個簡單的例子中是可行的,但當對象在別處更新時不可管理。所以我想有一個指向所有對象的指針數組。我的Google搜索告訴我,在Matlab中沒有指針,但是有什麼方法可以實現我在這裏要做的事情?

回答

4

我懷疑(它很難不看你的代碼)你的類A,B & C不從句柄繼承。

以下面的例子:

classdef noHandle 
    properties 
    name = ''; 
    end 
    methods 
    function obj = noHandle (name) 
     obj.name = name; 
    end 
    end 
end 

A = noHandle ('A'); 
B = noHandle ('B'); 
C = noHandle ('C'); 
allObjs = { A B C } 
allObjs{1}.name % check its name is "A" 
% change the name of A 
A.name = 'AAA' 
allObjs{1}.name % see that allObjs{1} is still A. 

但是如果你這樣做:

classdef fromHandle < handle 
    properties 
    name = ''; 
    end 
    methods 
    function obj = fromHandle (name) 
     obj.name = name; 
    end 
    end 
end 

然後做:

A = fromHandle ('A'); 
B = fromHandle ('B'); 
C = fromHandle ('C'); 
allObjs = { A B C } 
allObjs{1}.name % check its name is "A" 
% change the name of A 
A.name = 'AAA' 
allObjs{1}.name % see that allObjs{1} is updated to AAA. 
+0

沒有我的課沒有'handle'。有沒有關於它做什麼的文檔? – LWZ

+1

matlab文檔中有很多,請參閱https://stackoverflow.com/q/6436539/4196396 – matlabgui

相關問題