2016-12-03 90 views
1

我有我自己的類在MATLAB中創建的對象apple獲取類對象的指針

apple = classA(); 

類看起來是這樣的:

classdef classA < handle 

    properties 
     color = 'red'; 
    end 

    methods 
     function obj = classA() 
      % ... 
     end 
    end 
end 

問題:我如何獲取對象或處理指針apple?我想通過它們的屬性來搜索對象,例如:

isprop(eval(mat(i).name),'color') 

mat = whos。所以我需要獲取由struct mat(i).name表示的對象的指針。我只需要參考,而不是所需對象的副本。其目的是:

如果我得到的指針不知何故,像

ptr_to_apple_object = get_pointer_fct(mat(i).name) 

然後我能夠改變apple的性能-object喜歡:

ptr_to_apple_object. color = 'yellow' 

你有什麼想法?謝謝。

+0

MATLAB中沒有「指針」,所以你只想找到所有指向具有特定屬性的對象的變量? – Suever

+0

我只需要參考這樣的事情:'ptr.color ='blue''。但是'ptr'是指向蘋果對象的指針或引用,我試圖找到它。 – Lemonbonbon

+0

MATLAB沒有指針。另外,當它編譯爲java時,它甚至不會編譯爲具有指針的語言。 –

回答

3

有真的找到一個特定類的所有當前對象沒有什麼好辦法,但你可以使用whos獲得關於所有變量,遍歷這個結構,並確定哪些具有這樣的性質,你再修改

variables = whos; 

for k = 1:numel(variables) 
    obj = eval(variables(k).name); 

    if isobject(obj) && isprop(obj, 'color') 
     obj.color = 'yellow'; 
    end 
end 

如果你正在尋找一個特定的類,你可以使用whos

is_class = ismember({variables.class}, 'classA'); 
instances = variables(is_class); 

for k = 1:numel(instances) 
    obj = eval(instances(k).name); 
    obj.color = 'yellow'; 
end 

更新的輸出class領域

由於您的子類爲handle,因此當您將實例分配給新變量(上面的obj = val(variables(k).name))時,它不會創建實例的副本,而是創建對同一對象的新引用。

b = classA; 
c = b; 

b.color = 'red'; 

c.color 
% 'red' 
+0

這基本上是我迄今爲止所做的,但我認爲這會在工作區中創建對象('apple')的副本('obj')。 – Lemonbonbon

+1

@Lemonbonbon您正在使用'handle'類,因此沒有副本,它們都指的是同一個對象 – Suever

+0

AH,好的。我不知道。 – Lemonbonbon