如何编写返回以下内容的函数bytes?
:
(bytes? [1 2 3]) ;; => false
(bytes? (byte-array 8)) ;; => true
答案 0 :(得分:12)
我以前用这种方式做的就是创建一个这种类型的数组并测试它的类。为了防止每次都创建一个不必要的实例,请创建一个关闭该特定数组类型的类的函数。
(defn test-array
[t]
(let [check (type (t []))]
(fn [arg] (instance? check arg))))
(def byte-array?
(test-array byte-array))
=> (byte-array? (byte-array 8))
true
=> (byte-array? [1 2 3])
false
Mobyte的例子似乎更简单了,似乎我会在我使用它的地方进行一些重构:)
答案 1 :(得分:10)
(defn bytes? [x]
(if (nil? x)
false
(= (Class/forName "[B")
(.getClass x))))
更新。此处已经提出同样的问题Testing whether an object is a Java primitive array in Clojure。并且谷歌在你的问题上给出了那个页面“如何检查一个clojure对象是否是一个字节数组?” ;)
答案 2 :(得分:1)
Clojure.core 1.9及更高版本支持bytes?
函数。这是Clojuredocs link