我正在编写一个Matlab脚本,其中我有一堆同一个自定义类的对象,比如A
,B
和C
。然后我有一个函数可以处理2个对象中的任何一个,比如func(A,B)
。
现在我要选择一个对象,比如说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
后,A
中的AllObjs
无法获得更新。因此,对于下一个循环,我必须创建一个包含所有对象的新数组。它在这个简单的例子中是可行的,但是当对象在别处更新时是不可管理的。所以我希望有一个指向所有对象的指针数组。我的Google搜索告诉我Matlab中没有指针,但有没有办法实现我想要做的事情?
答案 0 :(得分:4)
我怀疑(很难看到你的代码)你的A,B和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.