我有一个由我自己的类在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
。所以我需要获取对象的指针,由结构mat(i).name
表示。我只需要引用,而不是所需对象的副本。目的是:
如果我以某种方式得到指针,比如
ptr_to_apple_object = get_pointer_fct( mat(i).name )
然后我可以更改apple
- 对象的属性,如:
ptr_to_apple_object. color = 'yellow'
你有什么想法吗?感谢。
答案 0 :(得分:3)
找到特定类的所有当前对象真的没有好方法,但是你可以使用whos
来获取关于所有变量的结构,循环遍历这个并确定哪些具有你的属性然后修改< / p>
variables = whos;
for k = 1:numel(variables)
obj = eval(variables(k).name);
if isobject(obj) && isprop(obj, 'color')
obj.color = 'yellow';
end
end
如果您要查找特定课程,可以使用class
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
<强>更新强>
由于您是handle
的子类,当您将实例分配给新变量(上面的obj = val(variables(k).name)
)时,它不会创建实例的副本,而是创建对同一对象的新引用
b = classA;
c = b;
b.color = 'red';
c.color
% 'red'