En utilisant _bitmask de PltScheme IFF
Question
Ceci est une partie d'une bibliothèque d'emballage plt-schéma:
(define InputMask
(_bitmask '(NoEventMask = #x00000000
KeyPressMask = #x00000001
KeyReleaseMask = #x00000002
...
OwnerGrabButtonMask = #x01000000)
_long))
La chose est que je ne peux pas comprendre comment accéder à des champs dans un masque de bits (ou ENUM pour cette matière). Comment puis-je obtenir la valeur KeyPressMask par exemple?
La solution
Vous ne le faites pas. Ajout ctypes est facile:. Pour faire une nouvelle ctype, vous devez fournir une ctype existante à exploiter, et deux fonctions - un à traduire tout le type existant, et un à traduire dans l'autre sens
Maintenant, le type de _bitmask
exactement ce que fait - il construit sur _int
(mais dans votre cas, il est sur _long
), et les deux fonctions de traduction traduire une liste de symboles à un nombre entier, et un entier à une liste de symboles . Une fois qu'un tel type est utilisé, vous n'avez pas besoin de connaître la valeur de KeyPressMask
- vous savez que vous pouvez passer '(KeyPressMask)
comme une entrée InputMask
à la fonction étrangère, et qui sera traduit au nombre approprié; et vous savez aussi que lorsque vous obtenez la valeur du résultat d'une fonction qui a une sortie de InputMask
, alors il sera une liste de symboles qui pourraient contenir KeyPressMask
. L'essentiel est que du côté régime, vous ne traitez pas avec des chiffres -. Uniquement avec des listes de symboles
Si vous faire ont besoin d'accéder à ces valeurs pour une raison obscure, vous pouvez construire votre propre ctype d'une autre manière - en utilisant make-ctype
(comme je l'ai indiqué ci-dessus) devrait être très facile <. / p>