Quelle est la syntaxe pour créer un tableau d'octets dans Clojure initialisé à une collection de valeurs spécifiée?Comment initialiser un tableau d'octets dans Clojure
Quelque chose de ce genre, mais qui fonctionne ...
(byte-array [0 1 2 3])
Quelle est la syntaxe pour créer un tableau d'octets dans Clojure initialisé à une collection de valeurs spécifiée?Comment initialiser un tableau d'octets dans Clojure
Quelque chose de ce genre, mais qui fonctionne ...
(byte-array [0 1 2 3])
(byte-réseau (octet de la carte [0 1 2 3])
afaik Clojure n'a pas d'octets littéraux.
Correct; à partir de Clojure 1.5, il n'a pas de littéral octet: http://clojure.org/reader –
(byte-array [(byte 0x00) (byte 0x01) (byte 0x02) (byte 0x03)])
(byte-array [(byte 0) (byte 1) (byte 2)])
Explication:
byte
crée un byte
byte-array
crée un byte[]
bytes
convertit
byte[]
byte-array crée octet [], donc l'appel à bytes n'est pas nécessaire. –
Vous avez raison. Repl automatiquement les primitives de boxe m'a confus. Corrigé –
En fait, 'byte' coerces à' byte', bien que dans 1.2 tous les arguments aux fonctions soient autoboxed, donc 'byte-array' reçoit toujours' Byte'-s et doit les déballer. Essayez '(boucle [i (octet 0)] (récurrence (octet 0)))' à un REPL 1.2 pour vérifier cela. –
D'autres affiches ont étant donné de bonnes réponses qui fonctionnent bien.
Ceci est juste au cas où vous faites cela beaucoup et veulent une macro pour rendre votre syntaxe un peu plus net:
(defmacro make-byte-array [bytes]
`(byte-array [[email protected](map (fn[v] (list `byte v)) bytes)]))
(aget (make-byte-array [1 2 3]) 2)
=> 3
Une fonction fonctionnerait tout aussi bien, non? Cette réponse brise la [première règle du Macro Club] (https://clojurefun.wordpress.com/2013/01/09/when-do-you-need-macros-in-clojure/): N'écrivez pas de macros! –
votre travail échantillon ** ** ne dans les versions ultérieures de Clojure (testé dans 1,8). Je ne sais pas quand ça a changé. –