في MATLAB، هل يمكن أن تعمل طريقة الفصل كرد اتصال uicontrol دون أن تكون عامة؟

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

سؤال

في MATLAB 2008a، هل هناك طريقة للسماح لطريقة الفصل بالعمل كوظيفة رد اتصال uicontrol دون الحاجة إلى جعل الطريقة عامة؟من الناحية النظرية، لا ينبغي أن تكون الطريقة عامة لأنه لا ينبغي مطلقًا استدعاؤها من قبل مستخدم الفصل.يجب أن يتم استدعاؤه فقط كنتيجة لحدث واجهة المستخدم الذي يؤدي إلى رد اتصال.ومع ذلك، إذا قمت بتعيين وصول الطريقة إلى خاص أو محمي، فلن يعمل رد الاتصال.صفي مشتق من 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