2016-11-27 60 views
2

我用我自己的类my_class像创造了MATLAB对象本如何找到由自己的类创建的对象?

car = my_class(); 

classdef my_class < handle 

    properties 
     color = 'red'; 
    end 

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

现在我想通过它的类(my_class)或属性,找到我的对象(color )。但是findallfindobj总是返回一个空矩阵,无论我在做什么。你有任何线索吗?谢谢。

编辑我需要的是这样的:

car1 = my_classA(); 
car2 = my_classA(); 
house1 = my_classB(); ... house25 = my_classB(); 
tree1 = my_classC(); ... tree250 = my_classC(); 

在我的代码,我不能指手柄的名称(如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 
+0

你为什么要这么做?你的用例是什么? –

+0

我需要更改属性或需要调用多个对象的方法。但是我需要首先在某种类型的循环或类似环境中搜索指定的对象,因为我想通过它们的值而不是它们的句柄来获取对象。 – Lemonbonbon

+0

...但为什么你不收集数组中的那些对象呢? –

回答

2

我觉得你只是想这样的:

% 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会好得多读。 但是,据我所知,这只适用于图形手柄,所以你必须为你的课程重载它。

而且那个重载的函数会包含类似于这个的东西。

编辑由纳文指出,这个工程:

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

似乎比strcmp方法快了。

+2

findobj应该在这种情况下工作正常。 B = findobj(A,'color','red'); [bcolor] = deal('orange');只要您将句柄作为第一个输入传递,findobj就可以用于句柄类。 – Navan

+0

@Navan是的,它确实:我站得更正了。 –

+0

谢谢,但那不完全是,我正在寻找。我需要一些(第一)遍历所有自己的对象(不使用或不知道对象的句柄),然后(第二个)获取特定对象的句柄。 – Lemonbonbon