في MATLAB، هل يمكن أن تعمل طريقة الفصل كرد اتصال uicontrol دون أن تكون عامة؟
-
01-07-2019 - |
سؤال
في 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
لا تنتمي إلى StackOverflow