MATLAB では、クラス メソッドをパブリックにしなくても uicontrol コールバックとして機能できますか?

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

質問

MATLAB 2008a では、メソッドをパブリックにしなくても、クラス メソッドが uicontrol コールバック関数として機能できるようにする方法はありますか?概念的には、このメソッドはクラスのユーザーによって決して呼び出されるべきではないため、パブリックにするべきではありません。コールバックをトリガーする UI イベントの結果としてのみ呼び出す必要があります。ただし、メソッドのアクセスをプライベートまたは保護に設定すると、コールバックは機能しません。私のクラスは hgsetget から派生し、2008a classdef 構文を使用して定義されています。

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