2016-11-27 3 views
2

Я создал объект в MATLAB, используя свой собственный класс my_class как этоКак найти объект, созданный собственным классом?

car = my_class(); 

с

classdef my_class < handle 

    properties 
     color = 'red'; 
    end 

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

Сейчас я пытаюсь найти объект по его классу (my_class) или свойствами (color). Но findall или findobj всегда возвращают пустую матрицу, что бы я ни делал. У вас есть какая-то подсказка? Благодарю.

EDIT мне нужно что-то вроде этого:

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 было бы гораздо лучше читать. Но это касается только графических обработок, насколько я знаю, поэтому вам придется перегружать его для своего класса.

И эта перегруженная функция будет содержать что-то похожее на это.

EDIT как отметил Наван, это работает:

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

, кажется, быстрее, чем метод strcmp тоже.

+2

findobj должен отлично работать в этом случае. B = findobj (A, 'color', 'red'); [B.color] = сделка («оранжевый»); findobj работает для классов дескрипторов, пока вы передаете дескрипторы в качестве первого ввода. – Navan

+0

@ Наван да, это так: Я стою исправлено. –

+0

Спасибо, но это не совсем то, что я искал. Мне нужно что-то, что (сначала) перебирает все собственные объекты (без использования или знания дескриптора объекта), а затем (второй) получает дескриптор конкретного объекта. – Lemonbonbon

Смежные вопросы