Main Content

リスナー コールバックの構文

リスナー コールバックの指定

コールバックとは、リスナーがイベントの通知を受け取ると実行される関数のことです。リスナーを作成するときに、コールバック関数を参照する関数ハンドルを addlistener または listener に渡します。

すべてのコールバック関数は、少なくとも 2 つの引数を受け取る必要があります。

  • イベントのソースであるオブジェクトのハンドル

  • event.EventData オブジェクトまたは event.EventData クラスから派生したオブジェクト

コールバックを参照する構文

関数 functionName の場合

lh = addlistener(eventSourceObj,'EventName',@functionName)

クラスのオブジェクト obj.methodName で呼び出された通常のメソッドの場合

lh = addlistener(eventSourceObj,'EventName',@obj.methodName)

静的メソッド ClassName.methodName の場合

lh = addlistener(eventSourceObj,'EventName',@ClassName.methodName)

名前空間内の関数 nspname.functionName の場合

lh = addlistener(eventSourceObj,'EventName',@nspname.functionName)

コールバック関数の入力引数

必要な引数を受け取るようコールバック関数を定義します。

function callbackFunction(src,evnt)
   ...
end

イベント ソースおよびイベント データ引数を使用しない場合、これらの入力を無視するよう関数を定義できます。

function callbackFunction(~,~)
   ...
end

メソッドの場合は、次のようになります。

function callbackMethod(obj,src,evnt)
   ...
end

コールバック関数の追加引数

MATLAB® により渡されるソースとイベント データの引数以外にも引数をコールバックに渡すには、無名関数を使用します。無名関数では、現在のワークスペース内で利用できるすべての変数を使用することができます。

無名関数を使用する構文

以下は、通常のメソッドの構文です。入力引数 (arg1,...argn) は、addlistener を呼び出すコンテキスト内で定義されなければなりません。

lh = addlistener(src,'EventName',@(src,evnt)obj.callbackMethod(src,evnt,arg1,...argn)

varargin を使用してコールバック関数を定義します。

function callbackMethod(src,evnt,varargin)
   arg1 = varargin{1};
   ...
   argn = varargin{n};
   ...
end

無名関数に関する一般的な情報については、無名関数を参照してください。

コールバック用のメソッドの使用

TestAnonyFcn クラスにより、追加の引数を使用した無名関数の使用方法を示します。リスナー コールバックが入力引数を表示し、MATLAB によるコールバック メソッドの呼び出し方法を示しています。

classdef TestAnonyFcn < handle
   events
      Update
   end
   methods
      function obj = TestAnonyFcn
         t = datestr(now);
         addlistener(obj,'Update',@(src,evnt)obj.evntCb(src,evnt,t));
      end
      function triggerEvnt(obj)
         notify(obj,'Update')
      end
   end
   methods (Access = private)
      function evntCb(~,~,evnt,varargin)
         disp(['Number of inputs: ',num2str(nargin)])
         disp(evnt.EventName)
         disp(varargin{:})
      end
   end
end

オブジェクトを作成し、triggerEvt メソッドを呼び出してイベントをトリガーします。

obj = TestAnonyFcn;
obj.triggerEvnt;
Number of inputs: 4
Update
01-Jul-2008 17:19:36

関連するトピック