リスナー コールバックの構文
リスナー コールバックの指定
コールバックとは、リスナーがイベントの通知を受け取ると実行される関数のことです。リスナーを作成するときに、コールバック関数を参照する関数ハンドルを 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)
パッケージ内の関数 PackageName.functionName
の場合
lh = addlistener(eventSourceObj,'EventName',@PackageName.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