11

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

(bytes? [1 2 3]) ;; => false
(bytes? (byte-array 8)) ;; => true
4

3 回答 3

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 的示例似乎要简单得多,而且似乎我将在使用它的地方进行一些重构:)

于 2013-02-10T11:32:17.010 回答
10
(defn bytes? [x]
  (if (nil? x)
    false
    (= (Class/forName "[B")
       (.getClass x))))

更新。在这里测试对象是否是 Clojure 中的 Java 原始数组已经问过同样的问题。谷歌在你的问题“如何检查 clojure 对象是否是字节数组?”中给出了准确的页面。;)

于 2013-02-10T11:27:52.527 回答
5

Clojure.core 1.9 及以上版本支持一个bytes?函数。这是Clojuredocs 链接

于 2019-04-10T09:30:54.547 回答