在Clojure中创建一个字节数组,并初始化为指定的值集合,语法是什么?
类似于这样,但更实用...
(byte-array [0 1 2 3])
(字节数组 (映射 字节 [0 1 2 3]))
据我所知,Clojure 没有字节字面量。
其他回答者给出了有效的解决方案。
这只是给你提供一个宏,以使你的语法更整洁,如果你需要经常这样做:
(defmacro make-byte-array [bytes]
`(byte-array [~@(map (fn[v] (list `byte v)) bytes)]))
(aget (make-byte-array [1 2 3]) 2)
=> 3
(byte-array [(byte 0x00) (byte 0x01) (byte 0x02) (byte 0x03)])
(byte-array [(byte 0) (byte 1) (byte 2)])
说明:
byte
创建一个 byte
byte-array
创建一个 byte[]
bytes
将其转换为 byte[]
byte
强制转换为 byte
,尽管在 1.2 版本中,所有函数的参数都会自动装箱,因此 byte-array
仍然接收 Byte
并需要将其拆箱。在 1.2 REPL 中尝试 (loop [i (byte 0)] (recur (Byte. 0)))
来验证这一点。 - Michał Marczyk(class (byte 1))
来测试类型,它将返回java.lang.Byte
,因为在传递给class
函数时已经进行了装箱,尽管(byte 1)
是一个原始的byte
。 - Goran Jovic