В MATLAB может ли метод класса действовать как обратный вызов uicontrol, не будучи общедоступным?
-
01-07-2019 - |
Вопрос
В MATLAB 2008a есть ли способ разрешить методу класса действовать как функция обратного вызова uicontrol без необходимости делать метод общедоступным?Концептуально метод не должен быть общедоступным, потому что он никогда не должен вызываться пользователем класса.Он должен вызываться только в результате события пользовательского интерфейса, запускающего обратный вызов.Однако, если я установлю для доступа метода значение private или protected, обратный вызов не сработает.Мой класс является производным от hgsetget и определяется с использованием синтаксиса classdef 2008a.
Код uicontrol выглядит примерно так:
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
Код обратного вызова выглядит следующим образом:
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
Решение
Сохранение дескриптора функции обратного вызова как частного свойства, по-видимому, позволяет обойти проблему.Попробуй это:
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