Нахождение объектов с определенными значениями

Нахождение объектов указателя

Используйте handle класс findobj метод, чтобы найти объекты, которые имеют свойства с определенными значениями. Например, следующий класс задает PhoneBook объект представлять телефонную запись по счету в базе данных. PhoneBook класс разделяет на подклассы dynamicprops класс, который выводит из handle.

classdef PhoneBook < dynamicprops
   properties
      Name
      Address
      Number
   end
   methods
      function obj = PhoneBook(n,a,p)
         obj.Name = n;
         obj.Address = a;
         obj.Number = p;
      end
   end
end

Вот три из PhoneBook записи в базе данных:

PB(1) = PhoneBook('Nancy Vidal','123 Washington Street','5081234567');
PB(2) = PhoneBook('Nancy Vidal','123 Main Street','5081234568');
PB(3) = PhoneBook('Nancy Wong','123 South Street','5081234569');

Один из этих трех PhoneBook объекты имеют динамическое свойство:

PB(2).addprop('HighSpeedInternet');
PB(2).HighSpeedInternet = '1M';

Нахождение Пар Свойства/Значения

Найдите объект, представляющий сотрудника Nancy Wong и отобразите имя и номер путем конкатенации строк:

NW = findobj(PB,'Name','Nancy Wong');
[NW.Name,' - ',NW.Number] 
ans =

Nancy Wong - 5081234569

Нахождение объектов с определенными именами свойства

Ищите объекты с определенными именами свойства с помощью -property опция:

H = findobj(PB,'-property','HighSpeedInternet');
H.HighSpeedInternet
ans =

1M

-property опция позволяет вам не использовать значение свойства и поиска объектов с помощью только имя свойства.

Используя логические выражения

Ищите определенные комбинации имен свойства и значений:

H = findobj(PB,'Name','Nancy Vidal','-and','Address','123 Main Street');
H.Number
ans =

5081234568

Нахождение настройками атрибута

Все метаклассы выводят из handle класс. Можно использовать handle findobj метод, чтобы найти члены класса, которые имеют определенные настройки атрибута.

Например, найдите абстрактные методы в определении класса путем поиска meta.class MethodList для meta.method объекты с их Abstract набор свойств к true:

Используйте имя класса в формате символов, потому что класс абстрактен. Вы не можете создать объект класса:

mc = meta.class.fromName('MyClass');

Ищите MethodList список meta.method объекты для тех методов, которые имеют их Abstract набор свойств к true:

absMethods = findobj(mc.MethodList,'Abstract',true);
methodNames = {absMethods.Name};

Массив ячеек, methodNames, содержит имена абстрактных методов в классе.

Найдите свойства, которые сделали, чтобы общественность получила доступ

Найдите имена всех свойств в containers.Map класс, которые имеют общедоступный GetAccess:

  • Получите meta.class объект.

  • Используйте findobj искать массив meta.property объекты.

  • Используйте фигурные скобки, чтобы создать массив ячеек имен свойства.

mc = ?containers.Map;
mpArray = findobj(mc.PropertyList,'GetAccess','public');
names = {mpArray.Name};

Отобразите имена всего containers.Map свойства, которые имеют общедоступный GetAccess:

celldisp(names)
names{1} =
 
Count
 
 names{2} =
 
KeyType
 
names{3} =
 
ValueType

Нахождение статических методов

Определите если любой containers.Map методы класса являются статическими:

~isempty(findobj([mc.MethodList(:)],'Static',true))
ans =

     1

findobj возвращает массив meta.method объекты для статических методов. В этом случае список статических методов не пуст. Поэтому существуют статические методы, заданные этим классом.

Получите имена любых статических методов от meta.method массив:

staticMethodInfo = findobj([mc.MethodList(:)],'Static',true);
staticMethodInfo(:).Name
ans =

empty

Имя статического метода (существует только один в этом случае), empty. Вот информация от meta.method объект для empty метод:

staticMethodInfo
  method with properties:

                   Name: 'empty'
            Description: 'Returns an empty object array of the given size'
    DetailedDescription: ''
                 Access: 'public'
                 Static: 1
               Abstract: 0
                 Sealed: 0
                 Hidden: 1
             InputNames: {'varargin'}
            OutputNames: {'E'}
          DefiningClass: [1x1 meta.class]

Смотрите также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте