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
Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top