Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

特定の値をもつオブジェクトの検出

ハンドル オブジェクトの検出

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]

参考

関連するトピック