2016-12-03 122 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