Arrays 如何在Clojure中初始化字节数组
在Clojure中创建初始化为指定值集合的字节数组的语法是什么 像这样的东西,但那有用 (字节数组[0 1 2 3])(字节数组(映射字节[0 1 2 3])) afaik Clojure没有字节文本Arrays 如何在Clojure中初始化字节数组,arrays,clojure,bytearray,Arrays,Clojure,Bytearray,在Clojure中创建初始化为指定值集合的字节数组的语法是什么 像这样的东西,但那有用 (字节数组[0 1 2 3])(字节数组(映射字节[0 1 2 3])) afaik Clojure没有字节文本 (byte-array [(byte 0) (byte 1) (byte 2)]) 说明: 字节创建一个字节 字节数组创建一个字节[] bytes将其转换为byte[]其他海报给出了很好的答案,效果很好 这只是为了防止您经常这样做,并希望使用宏使语法更整洁: (defmacro make-byt
(byte-array [(byte 0) (byte 1) (byte 2)])
说明:
字节
创建一个字节
字节数组
创建一个字节[]
bytes
将其转换为byte[]
其他海报给出了很好的答案,效果很好
这只是为了防止您经常这样做,并希望使用宏使语法更整洁:
(defmacro make-byte-array [bytes]
`(byte-array [~@(map (fn[v] (list `byte v)) bytes)]))
(aget (make-byte-array [1 2 3]) 2)
=> 3
字节数组创建字节[],因此不需要调用字节。你是对的。Repl自动装箱原语让我感到困惑。事实上,
字节
强制为字节
,尽管在1.2中,函数的所有参数都是自动装箱的,所以字节数组
仍然接收字节
-s,需要取消装箱。尝试在1.2 REPL中使用(循环[i(字节0)](递归(字节0))
来验证这一点。好的,如果我使用(类(字节1))
测试类型,它将生成java.lang.byte
,因为它在传递到类
函数时被装箱,尽管(字节1)
是一个基本的字节
。以下是垃圾吗?(类(字节数组[(字节0)(字节1)(字节2)]),它在repl输出中给出奇怪的[B]。正确;从Clojure 1.5开始,它没有字节文字:函数也可以工作,对吗?这个答案打破了:不要写宏!你的示例在Clojure的更高版本(在1.8中测试)中工作。不确定它何时更改。
(defmacro make-byte-array [bytes]
`(byte-array [~@(map (fn[v] (list `byte v)) bytes)]))
(aget (make-byte-array [1 2 3]) 2)
=> 3