リスナー コールバックの構文
R2026bリスナー コールバックは、リスナーがイベントの通知を受信したときに実行されます。addlistener または listener を使用してリスナーを作成する際、コールバックを参照する関数ハンドルを入力引数として渡します。
リスナー コールバックの構文
リスナーを作成する際に、さまざまなタイプのコールバックを指定できます。以下に例を示します。
関数:
addlistener(eventSourceObj,"EventName",@functionName)
クラスのオブジェクトを指定して呼び出される通常のメソッド:
addlistener(eventSourceObj,"EventName",@obj.methodName)
ClassNameの静的メソッド:addlistener(eventSourceObj,"EventName",@ClassName.methodName)
名前空間関数:
addlistener(eventSourceObj,"EventName",@nspname.functionName)
コールバック関数の入力引数
すべてのコールバックは、少なくとも 2 つの入力引数にアクセスできます。
src— イベントのソースであるオブジェクトのハンドル。evnt—event.EventDataオブジェクト、またはevent.EventDataクラスから派生したオブジェクト。
両方の引数を受け入れるコールバック関数を定義します。
function callbackFunction(src,evnt) ... end
コールバック メソッドの構文も似ていますが、メソッドを定義するクラスのオブジェクトを入力として追加します。
methods function callbackMethod(obj,src,evnt) ... end end
イベント ソースおよびイベント データ引数に関する情報が必要ない場合は、これらの引数を無視するようにリスナーおよびコールバック関数を定義できます。
addlistener(eventSourceObj,"EventName",@(~,~)callbackFunction)
function callbackFunction ... end
コールバック関数の追加引数
コールバック関数には、ソースおよびイベント オブジェクト以外の引数を渡すことができます。入力引数は、addlistener を呼び出すコンテキスト内で定義されなければなりません。
たとえば、次の例は、関数 callbackFunction に 2 つの追加の引数 arg1 および arg2 を渡すリスナーを作成する構文を示しています。
arg1 = 1; arg2 = 2; addlistener(src,"EventName",@(src,evnt)callbackFunction(src,evnt,arg1,arg2))
function callbackFunction(src,evnt,arg1,arg2) ... end
コールバック メソッドの例
ClassWithWeakHandleProperty クラスは、ハンドル オブジェクトの 1 行 n 列の配列への弱い参照である 1 つのプロパティ WeakProperty を定義します。このクラスは、WeakProperty に格納されているオブジェクトの ObjectBeingDestroyed イベントに対するリスナーを定義します。コールバック メソッド respondToWeakPropertyDestruction は、そのオブジェクトが破棄されたときにメッセージを表示します。
classdef ClassWithWeakHandleProperty < handle properties (WeakHandle) WeakProperty (1,:) handle = matlab.lang.HandlePlaceholder.empty end methods function obj = ClassWithWeakHandleProperty(weakProp) if (~isvalid(weakProp)) error("Input must be a valid handle object.") end obj.WeakProperty = weakProp; addlistener(weakProp,"ObjectBeingDestroyed",@(~,~)obj.respondToWeakPropertyDestruction); end end methods (Access=private) function respondToWeakPropertyDestruction(obj) disp("WeakProperty destroyed.") end end end
matlab.lang.HandlePlaceholder のインスタンスである h を作成し、それを ClassWithWeakHandleProperty のコンストラクターへの引数として使用します。h をクリアすると、ObjectBeingDestroyed イベントがトリガーされます。
h = matlab.lang.HandlePlaceholder;
cwhp = ClassWithWeakHandleProperty(h);
clear hWeakProperty destroyed.