Pergunta

Esta é uma parte de uma biblioteca plt-scheme fardos:

(define InputMask

  (_bitmask '(NoEventMask =            #x00000000

            KeyPressMask =             #x00000001

            KeyReleaseMask =           #x00000002

            ...

            OwnerGrabButtonMask =      #x01000000)

      _long))

A coisa é que eu não consigo descobrir como a campos de acesso em uma máscara de bits (ou enum para que o assunto). Como posso obter o valor KeyPressMask por exemplo?

Foi útil?

Solução

Você não. Adicionando ctypes é fácil:. Para fazer uma nova ctype, você precisa fornecer um ctype para construir, e duas funções - uma para traduzir o que quer com o tipo existente, e uma para traduzir a outra maneira

Agora, o tipo _bitmask faz exatamente isso - ele constrói em _int (mas no seu caso, é em _long), e as duas funções de tradução traduzir uma lista de símbolos para um inteiro, e um inteiro para uma lista de símbolos . Uma vez que tal tipo é usado, você não precisa saber o valor de KeyPressMask - você só sabe que você pode passar '(KeyPressMask) como uma entrada InputMask para a função externa, e que será traduzido para o número apropriado; e você também sabe que quando você começa o valor do resultado de uma função que tem uma saída InputMask, então será uma lista de símbolos que podem conter KeyPressMask. A linha inferior é que no lado do Esquema você não lidar com números -. Apenas com listas de símbolos

Se você do necessidade de acesso desses valores para alguma razão obscura, então você pode construir seu próprio ctype de alguma outra maneira -. Utilizando make-ctype (como I descrito acima) deve ser muito fácil

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top