Matlab 如何找到由自己的类创建的对象?

Matlab 如何找到由自己的类创建的对象?,matlab,class,oop,object,find,Matlab,Class,Oop,Object,Find,我使用自己的类my_class在MATLAB中创建了一个对象,如下所示 car = my_class(); 与 在我的代码中,我无法引用句柄的名称(如car2.color),因为我有许多不同的对象,我希望通过一个函数来搜索它们,该函数如下所示: loop over all objects (maybe with findobj/findall without knowing object name/handle) if object is of class `my_classA`

我使用自己的类
my_class
在MATLAB中创建了一个对象,如下所示

car = my_class();

在我的代码中,我无法引用句柄的名称(如
car2.color
),因为我有许多不同的对象,我希望通过一个函数来搜索它们,该函数如下所示:

loop over all objects (maybe with findobj/findall without knowing object name/handle)
    if object is of class `my_classA`
        get handle of `my_classA`
        change `color`
    else if object is of class `my_classB`
        get handle of `my_classB`
        do something ...
    end
end

我想你只是想要这个:

% Create example array of objects
A(20) = object;
[A([3 14 17]).color] = deal('blue');

% Get those objects which are red, and change to orange
[A(strcmp({A.color}, 'red')).color] = deal('orange');
我必须承认,
findobj
读起来会更好。但就我所知,这只适用于图形句柄,所以你必须为你的类重载它

重载函数将包含类似的内容

编辑正如Navan所指出的那样,这是有效的:

B = findobj(A, 'color', 'red');
[B.color] = deal('orange');

似乎也比strcmp方法快。

为什么要这样做?您的用例是什么?我需要更改属性或需要调用服务器对象的方法。但是我需要先在某种循环或类似的循环中搜索指定的对象,因为我想通过它们的值而不是它们的句柄来获取对象……但是为什么不将这些对象收集到一个数组中呢?……这已经开始了。我想我对这里发生的事情有预感……啊,好吧,我尝试了你的建议,收集了一个数组中的所有对象。到目前为止,这确实有效。谢谢但我也希望有一种不同的方法,首先通过类查找所有对象。我尝试了
h=findall(0,'class','my_classA')
和类似的事情,但是每次都返回一个空矩阵。在这种情况下,findobj应该可以正常工作。B=findobj(A,‘颜色’、‘红色’);[B.颜色]=交易(“橙色”);只要您将句柄作为第一个输入传递,findobj就可以用于句柄类。谢谢,但这并不是我想要的。我需要(首先)在所有自己的对象上循环(不使用或不知道对象的句柄),然后(第二)获得特定对象的句柄。@Lemonbonbon…为什么不能用我提供的代码做到这一点?也许您正在寻找函数
isa()
?如果这仍然不是您想要的,请您在您的确切目标中进行编辑,并提供示例输入和预期结果。
% Create example array of objects
A(20) = object;
[A([3 14 17]).color] = deal('blue');

% Get those objects which are red, and change to orange
[A(strcmp({A.color}, 'red')).color] = deal('orange');
B = findobj(A, 'color', 'red');
[B.color] = deal('orange');