En MATLAB, puede un método de clase actuar como un uicontrol de devolución de llamada sin ser público?
-
01-07-2019 - |
Pregunta
En MATLAB, 2008a, hay una manera de permitir a un método de clase para actuar como un uicontrol función de devolución de llamada sin tener que hacer el método público?Conceptualmente, el método no debe ser pública, porque nunca debe ser llamado por un usuario de la clase.Sólo debe ser llamado como resultado de un evento de interfaz de usuario la activación de una devolución de llamada.Sin embargo, si puedo configurar el método de acceso privado o protegido, la devolución de llamada no funciona.Mi clase es derivada de hgsetget y se define mediante la 2008a classdef sintaxis.
El uicontrol código sería 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
El código de devolución de llamada se parece a:
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
Solución
El almacenamiento de la función de la manija de la devolución de llamada como una propiedad privada parece la solución del problema.Intente esto:
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