How would one write the function bytes?
that returns the following:
(bytes? [1 2 3]) ;; => false
(bytes? (byte-array 8)) ;; => true
The way I used to do this until now was creating an array of that type and testing for it's class. To prevent creating an unnecessary instance every time, make a function that closes over the class of that particular array type.
(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's example seems a lot simpler though, and it seems I'll have some refactoring to do where I used this :)
(defn bytes? [x]
(if (nil? x)
false
(= (Class/forName "[B")
(.getClass x))))
Update. The same question has been already asked here Testing whether an object is a Java primitive array in Clojure. And google gives exactly that page on your question "how to check if a clojure object is a byte-array?" ;)
Clojure.core version 1.9 onwards supports a bytes?
function. Here's the Clojuredocs link
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With