Main Content

コールバックの実行

コールバック実行時の動作

リスナーでは、イベントの発生が通知されると、そのコールバック関数が実行されます。リスナーのコールバック実行時にエラーが発生しても、同じイベントに応答している他のリスナーやイベントをトリガーした関数が実行されないようにすることはできないという点で、リスナーは受動的なオブザーバーです。

コールバック関数の実行は、その関数が終了するまで続行されます。コールバック関数でエラーが発生した場合は、実行が停止され、制御は呼び出し側の関数に戻されます。その後、残りのリスナー コールバック関数が実行されます。

リスナーの実行順序

イベントの発生後にリスナー コールバック関数が実行される順序は、定義されていません。ただし、リスナー コールバックの実行は、イベントの発生と同期します。

ハンドル クラスの notify メソッドは、notify を呼び出した関数に実行を戻す前にすべてのリスナーを呼び出します。

notify を呼び出すコールバック

notify に渡し、その後リスナー コールバックに渡すイベント データ オブジェクトは、変更して再使用したり、コピーして再使用しないでください。

リスナー コールバックにより notify を呼び出してイベントをトリガーすることができます。これにはコールバックを呼び出した同じイベントが含まれます。関数が notify を呼び出すと、MATLAB® はコールバック関数に渡されるイベント データ オブジェクトのプロパティ値を設定します。続いて呼び出されるコールバックのプロパティが確実に適切値をもつようにするには、カスタム イベント データをもつ notify を呼び出す場合には必ず新しいイベント データ オブジェクトを作成してください。

コールバック エラーの管理

エラーに対するプログラムの応答を制御する場合は、リスナー コールバック関数の try/catch ステートメントを使用してエラー処理を行います。

関数ハンドルからの関数の呼び出し

クラス メソッド内で関数ハンドルを作成する場合、メソッドのコンテキストによって関数が実行されるコンテキストが決定されます。このコンテキストにより、そのクラスにアクセス可能なプライベートおよび保護されたメソッドへのアクセスが関数に付与されます。

たとえば、UpdateEvt クラスは、Update という名前のイベントおよびこのイベントのリスナーを定義します。リスナー コールバックはプライベート メソッド evtCb です。

classdef UpdateEvt < handle
   events
      Update
   end
   methods
      function obj = UpdateEvt
         addlistener(obj,'Update',@evtCb);
      end
   end
   methods (Access = private)
      function obj = evtCb(obj,varargin)
         disp('Updated Event Triggered')
      end
   end
end

プライベート メソッドは通常、クラス メソッドによってのみアクセス可能です。しかし、関数ハンドルがクラス メソッド内で作成されているので、notify はクラスの外部からコールバックを実行できます。

a = UpdateEvt;
a.notify('Update')
Updated Event Triggered

関連するトピック