В MATLAB может ли метод класса действовать как обратный вызов uicontrol, не будучи общедоступным?

StackOverflow https://stackoverflow.com/questions/106086

Вопрос

В 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top