Domanda

Questa è una parte di una libreria PLT-schema di involucro:

(define InputMask

  (_bitmask '(NoEventMask =            #x00000000

            KeyPressMask =             #x00000001

            KeyReleaseMask =           #x00000002

            ...

            OwnerGrabButtonMask =      #x01000000)

      _long))

Il fatto è che riesco a capire come accedere i campi in una maschera di bit (o enum per questo). Come posso ottenere il valore KeyPressMask per esempio?

È stato utile?

Soluzione

Non lo sai. L'aggiunta di ctypes è facile:. Per fare una nuova ctype, è necessario fornire un ctype esistente per costruire su, e due funzioni - uno per tradurre tutto ciò al tipo esistente, e uno per tradurre l'altro modo

Ora, il tipo _bitmask fa proprio questo - si basa sul _int (ma nel tuo caso, è su _long), e le due funzioni di traduzione tradurre un elenco di simboli in un intero, e un intero ad un elenco di simboli . Una volta che tale tipo viene utilizzato, non è necessario conoscere il valore di KeyPressMask - è sufficiente sapere che è possibile passare '(KeyPressMask) come input InputMask alla funzione estere, e che sarà tradotto il numero appropriato; e si sa anche che quando si ottiene il valore del risultato da una funzione che dispone di un'uscita InputMask, allora sarà un elenco di simboli che potrebbero contenere KeyPressMask. La linea di fondo è che sul lato Scheme non trattare con i numeri -. Solo con le liste di simboli

Se do hanno bisogno di accedere a questi valori per qualche oscura ragione, allora si può costruire il proprio ctype in qualche altro modo - usando make-ctype (come ho descritto sopra) dovrebbe essere molto facile <. / p>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top