如何编写bytes?
返回以下内容的函数:
(bytes? [1 2 3]) ;; => false
(bytes? (byte-array 8)) ;; => true
到目前为止,我这样做的方式是创建一个该类型的数组并测试它的类。为了防止每次都创建不必要的实例,请创建一个关闭该特定数组类型的类的函数。
(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 的示例似乎要简单得多,而且似乎我将在使用它的地方进行一些重构:)
(defn bytes? [x]
(if (nil? x)
false
(= (Class/forName "[B")
(.getClass x))))
更新。在这里测试对象是否是 Clojure 中的 Java 原始数组已经问过同样的问题。谷歌在你的问题“如何检查 clojure 对象是否是字节数组?”中给出了准确的页面。;)
Clojure.core 1.9 及以上版本支持一个bytes?
函数。这是Clojuredocs 链接