我在使用 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.myProp
,PreGet
并且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
是否有可能阻止它运行?或者如果不阻止它,至少要检测它?执行选项卡完成时,我可以运行另一个功能(例如,在命令窗口中显示帮助或工具提示)。