0

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ましPreGetPostGet!! 動的構造である場合myPropがあり、タブ補完を使用してそのフィールドにアクセスしています。

myTest.myProp. % Use tab completion
PreGet Executed
PostGet Executed
PreGet Executed
PostGet Executed
PreGet Executed
PostGet Executed
PreGet Executed
PostGet Executed

これが実行されないようにすることは可能ですか?または、少なくともそれを検出するためにそれを防止しない場合は? タブ補完が実行されたときに別の機能を実行できます (コマンド ウィンドウにヘルプやツールチップを表示するなど)。

4

0 に答える 0