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 上使用了“Tab Completion”功能myTest.myPropPreGet并且PostGet执行了 4 次!!有时myProp是一个动态结构,我使用 Tab 完成来访问它的字段。

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

是否有可能阻止它运行?或者如果不阻止它,至少要检测它?执行选项卡完成时,我可以运行另一个功能(例如,在命令窗口中显示帮助或工具提示)。

4

0 回答 0