Используйте 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 =
1findobj возвращает массив 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]