メインコンテンツ

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

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 h
WeakProperty destroyed.

参考

トピック