¿Cuál es la sintaxis para crear una matriz de bytes en Clojure inicializada en una colección de valores especificada?Cómo inicializar una matriz de bytes en Clojure
Algo como esto, pero eso funciona ...
(byte-array [0 1 2 3])
¿Cuál es la sintaxis para crear una matriz de bytes en Clojure inicializada en una colección de valores especificada?Cómo inicializar una matriz de bytes en Clojure
Algo como esto, pero eso funciona ...
(byte-array [0 1 2 3])
(matriz de bytes (mapa byte [0 1 2 3]))
afaik Clojure no tiene literales de byte.
Correcto; a partir de Clojure 1.5, no tiene un byte literal: http://clojure.org/reader –
(byte-array [(byte 0x00) (byte 0x01) (byte 0x02) (byte 0x03)])
(byte-array [(byte 0) (byte 1) (byte 2)])
Explicación:
byte
crea una byte
byte-array
crea una byte[]
bytes
convierte en
byte[]
byte-array crea byte [], por lo que la llamada a bytes no es necesaria. –
Tienes razón. Repl automáticamente las primitivas del boxeo me confundieron. Corregido –
De hecho, 'byte' coacciona a' byte', aunque en 1.2 todos los argumentos a las funciones son autoboxados, por lo que 'byte-array' aún recibe' Byte'-s y necesita destrabarlos. Intenta '(loop [i (byte 0)] (recurre (Byte. 0)))' en un 1.2 REPL para verificar esto. –
otros críticos han da buenas respuestas que funcionan bien.
Esto es en caso de que lo están haciendo esto mucho y quieren una macro para hacer su sintaxis un poco más ordenado:
(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
Una función funcionaría igual de bien, ¿verdad? Esta respuesta rompe la [primera regla de Macro Club] (https://clojurefun.wordpress.com/2013/01/09/when-do-you-need-macros-in-clojure/): ¡No escriba macros! –
su muestra ** ** no funcionaban en versiones posteriores de clojure (probado en 1.8) No estoy seguro cuando cambió –