سؤال

هذا جزء من مكتبة المجمع Scheme PLT:

(define InputMask

  (_bitmask '(NoEventMask =            #x00000000

            KeyPressMask =             #x00000001

            KeyReleaseMask =           #x00000002

            ...

            OwnerGrabButtonMask =      #x01000000)

      _long))

الشيء غير قادر على معرفة كيفية الوصول إلى الحقول في Bitmask (أو Enum لهذه المسألة). كيف يمكنني الحصول على قيمة keypressmask على سبيل المثال؟

هل كانت مفيدة؟

المحلول

لم تكن. إضافة CTTYPES أمر سهل: لجعل CTTYPE جديد، تحتاج إلى توفير CTTYPE موجودة للبناء، واثنين من الوظائف - واحد لترجمة أي شيء إلى النوع الحالي، وواحد لترجمة الطريقة الأخرى.

الآن، _bitmask النوع يفعل ذلك فقط - يبني _int (ولكن في قضيتك، إنه _long)، وترجمة وظائف الترجمة قائمة من الرموز إلى عدد صحيح، وعدد صحيح في قائمة الرموز. بمجرد استخدام هذا النوع، لا تحتاج إلى معرفة قيمة KeyPressMask - أنت تعرف فقط أنه يمكنك المرور '(KeyPressMask) كما InputMask المدخلات إلى الوظيفة الأجنبية، وسيتم ترجمة ذلك إلى العدد المناسب؛ وأنت تعرف أيضا أنه عندما تحصل على قيمة النتيجة من وظيفة تحتوي على InputMask الإخراج، ثم ستكون قائمة بالرموز التي قد تحتوي KeyPressMask. وبعد خلاصة القول هو أنه على جانب المخطط، لا تتعامل مع الأرقام - فقط مع قوائم الرموز.

اذا أنت فعل تحتاج إلى الوصول إلى هذه القيم لبعض السبب الغامض، ثم يمكنك بناء CTTYPE الخاصة بك بطريقة أخرى - باستخدام make-ctype (كما أوضحت أعلاه) يجب أن تكون سهلة للغاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top