如何检查clojure对象是否是字节数组?

zca*_*ate 11 clojure

如何编写bytes?返回以下内容的函数:

(bytes? [1 2 3]) ;; => false
(bytes? (byte-array 8)) ;; => true
Run Code Online (Sandbox Code Playgroud)

Nie*_*lsK 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
Run Code Online (Sandbox Code Playgroud)

Mobyte的例子似乎更简单了,似乎我会在我使用它的地方做一些重构:)

  • 没有答案有权获得赞成:人们喜欢他们喜欢的东西.根据我的经验,抱怨缺乏选票会使他们更加沮丧. (2认同)

mob*_*yte 10

(defn bytes? [x]
  (if (nil? x)
    false
    (= (Class/forName "[B")
       (.getClass x))))
Run Code Online (Sandbox Code Playgroud)

更新.这里已经提出了同样的问题测试一个对象是否是Clojure中的Java原始数组.并且google在你的问题上给出了那个页面"如何检查clojure对象是否是一个字节数组?" ;)


sha*_*8me 5

Clojure.core 1.9 版以后支持一个bytes?功能。这是Clojuredocs 链接