Подсказки ко всем остальным ответам.Здесь это в виде одной строки:
(def byte-array? (partial instance? (Class/forName "[B")))
Для других примитивов, обратитесь к http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getName%28%29 (или спецификации Java).Или просто сделайте то, что предлагает Геррит с (type (xyz-array 0))
.В частности, вы можете использовать:
"[Z" boolean array
"[B" byte array
"[C" char array
"[D" double array
"[F" float array
"[I" integer array
"[J" long array
"[S" short array
Поскольку производительность уже упоминалась, вот небольшой результат теста (time (dotimes [_ 500000] (byte-array? x)))
с byte-array-class
def'd
(def byte-array? (partial instance? (Class/forName "[B")))
78.518335 msecs
(defn byte-array? [obj] (instance? byte-array-class obj))
34.879537 msecs
(defn byte-array? [obj] (= (type obj) byte-array-class))
49.68781 msecs
instance?
против type
= экземпляр?wins
partial
против defn
= defn wins
, но любой из этих подходов, скорее всего, не будет узким местом в производительности.