Использование _bitmask из PltScheme FFI
Вопрос
Это часть библиотеки-оболочки plt-схемы:
(define InputMask
(_bitmask '(NoEventMask = #x00000000
KeyPressMask = #x00000001
KeyReleaseMask = #x00000002
...
OwnerGrabButtonMask = #x01000000)
_long))
Дело в том, что я не могу понять, как получить доступ к полям в битовой маске (или перечислении, если на то пошло).Как я могу получить, например, значение KeyPressMask?
Решение
Вы не знаете.Добавить ctypes легко:Чтобы создать новый ctype, вам нужно предоставить существующий ctype для его дальнейшего развития и две функции — одну для перевода чего-либо в существующий тип, а другую для перевода в другую сторону.
Сейчас _bitmask
type делает именно это — он основывается на _int
(но в вашем случае он включен _long
), а две функции перевода преобразуют список символов в целое число, а целое число в список символов.При использовании такого типа вам не нужно знать значение KeyPressMask
-- ты просто знаешь, что можешь пройти '(KeyPressMask)
как InputMask
ввод во внешнюю функцию, и он будет преобразован в соответствующее число;и вы также знаете, что когда вы получаете значение результата от функции, у которой есть InputMask
вывод, то это будет список символов, которые могут содержать KeyPressMask
.Суть в том, что на стороне схемы вы не имеете дело с числами, а только со списками символов.
Если вы делать вам нужен доступ к этим значениям по какой-то неясной причине, тогда вы можете создать свой собственный ctype каким-то другим способом - используя make-ctype
(как я описал выше) должно быть очень легко.