MATLAB リスナー PreGet と PostGet の使用に問題があります。私の目的は、書き込み中および呼び出しプロパティを作成しているとき (各読み取り/書き込み操作の前後) に一連の関数を実行できるようにすることです。これは私のクラスの例です:
classdef myClass < handle
properties (GetObservable,SetObservable,GetAccess = public, SetAccess = public )
myProp = '';
end
methods
function myClass = myClass(Input)
myClass.myProp = Input;
addlistener(myClass , 'myProp' , 'PreGet' , @myClass.PreReadClass);
addlistener(myClass , 'myProp' , 'PreSet' , @myClass.PreSendClass);
addlistener(myClass , 'myProp' , 'PostGet' , @myClass.PostReadClass);
addlistener(myClass , 'myProp' , 'PostSet' , @myClass.PostSendClass);
end
end
methods (Hidden)
function PreSendClass(myClass, varargin)
disp('PreSet Executed')
end
function PostSendClass(myClass, varargin)
disp('PostSet Executed')
end
function PreReadClass(myClass, varargin)
disp('PreGet Executed')
end
function PostReadClass(myClass, varargin)
disp('PostGet Executed')
end
end
end
MATLAB 実行例:
>> myTest = myClass(1);
myTest.myProp = 1;
PreSet Executed
PostSet Executed
>> myVar = myTest.myProp;
myVar
PreGet Executed
PostGet Executed
myVar =
1
これで万事順調。関数を実行して、必要な結果を得ることができます。ただし、MATLAB on の「タブ補完」機能を使用し、4 回実行されることを観察しmyTest.myProp
ましPreGet
たPostGet
!! 動的構造である場合myProp
があり、タブ補完を使用してそのフィールドにアクセスしています。
myTest.myProp. % Use tab completion
PreGet Executed
PostGet Executed
PreGet Executed
PostGet Executed
PreGet Executed
PostGet Executed
PreGet Executed
PostGet Executed
これが実行されないようにすることは可能ですか?または、少なくともそれを検出するためにそれを防止しない場合は? タブ補完が実行されたときに別の機能を実行できます (コマンド ウィンドウにヘルプやツールチップを表示するなど)。