No MATLAB, pode um método de classe agir como um callback uicontrol sem ser público?
-
01-07-2019 - |
Pergunta
Em MATLAB 2008a, há uma maneira de permitir que um método de classe para atuar como uma função de retorno uicontrol sem ter que fazer o público método? Conceitualmente, o método não deve ser público, porque ele nunca deve ser chamado por um usuário da classe. Ele só deve ser chamado como resultado de um evento UI desencadeando uma chamada de retorno. No entanto, se eu definir o acesso do método para privada ou protegida, a chamada de retorno não funciona. Minha classe é derivada de hgsetget e é definido usando a sintaxe 2008a classdef.
O código uicontrol é algo como:
methods (Access = public)
function this = MyClass(args)
this.someClassProperty = uicontrol(property1, value1, ... , 'Callback', ...
{@(src, event)myCallbackMethod(this, src, event)});
% the rest of the class constructor code
end
end
Os olhares de código de retorno de chamada, como:
methods (Access = private) % This doesn't work because it's private
% It works just fine if I make it public instead, but that's wrong conceptually.
function myCallbackMethod(this, src, event)
% do something
end
end
Solução
Armazenar a alça função do retorno de chamada como uma propriedade privada parece resolver o problema. Tente isto:
classdef MyClass
properties
handle;
end
properties (Access=private)
callback;
end
methods
function this = MyClass(args)
this.callback = @myCallbackMethod;
this.handle = uicontrol('Callback', ...
{@(src, event)myCallbackMethod(this, src, event)});
end
end
methods (Access = private)
function myCallbackMethod(this, src, event)
disp('Hello world!');
end
end
end