特定の値をもつオブジェクトの検出
ハンドル オブジェクトの検出
handle
クラスの findobj
メソッドを使用して、特定の値をもつプロパティを見つけます。たとえば、以下のクラスは PhoneBook
オブジェクトを定義して、データ ベース内の電話帳エントリを表します。PhoneBook
クラスは、handle
から派生する dynamicprops
クラスをサブクラス化します。
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
データベースに以下の 3 つの 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');
これらの 3 つの 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
で、Abstract
プロパティが true
に設定された meta.method
オブジェクトを探して、クラス定義に含まれる抽象メソッドを検出します。
クラスは抽象型なので、文字形式でクラス名を使用します。このクラスのオブジェクトは作成できません。
mc = meta.class.fromName('MyClass');
meta.method
オブジェクトの MethodList
リスト内で、Abstract
プロパティが true
に設定されているメソッドを検出します。
absMethods = findobj(mc.MethodList,'Abstract',true);
methodNames = {absMethods.Name};
cell 配列 methodNames
にはクラスの抽象メソッドの名前が含まれています。
パブリックの GetAccess をもつプロパティの検出
パブリックの GetAccess
をもつ、containers.Map
クラス内のすべてのプロパティ名を以下のように検出します。
meta.class
オブジェクトを取得します。findobj
を使用すると、meta.property
オブジェクトの配列を検索できます。プロパティ名の cell 配列を作成するには、中かっこを使用します。
mc = ?containers.Map; mpArray = findobj(mc.PropertyList,'GetAccess','public'); names = {mpArray.Name};
パブリックの GetAccess
をもつすべての containers.Map
プロパティの名前を表示します。
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
静的メソッドの名前 (この場合 1 つのみ) は empty
です。empty
メソッドの meta.method
オブジェクトの情報は次のとおりです。
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]