Đạo cụ cho tất cả các câu trả lời khác. Ở đây nó là như một lớp lót:
(def byte-array? (partial instance? (Class/forName "[B")))
Đối với nguyên thủy khác, hãy tham khảo http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getName%28%29 (hoặc spec java). Hoặc chỉ cần làm những gì Gerrit gợi ý với (type (xyz-array 0))
. Cụ thể, bạn có thể sử dụng:
"[Z" boolean array
"[B" byte array
"[C" char array
"[D" double array
"[F" float array
"[I" integer array
"[J" long array
"[S" short array
Kể từ khi thực hiện đã được đề cập, đây là một chuẩn mực kết quả nhỏ chạy (time (dotimes [_ 500000] (byte-array? x)))
, và với 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?
vs type
= dụ? thắng
partial
vs defn
= defn thắng
nhưng bất kỳ các phương pháp tiếp cận có thể sẽ không phải là một nút cổ chai trong hoạt động.
Nguồn
2015-06-18 17:04:33
Không chắc chắn mã Clojure sẽ là gì, nhưng bạn có thể tạo một mảng trống cho mọi kiểu nguyên thủy, gọi getClass() trên các giá trị đó và lưu vào bộ nhớ cache kết quả. Đối tượng Class nên giống nhau đối với mọi mảng của kiểu nguyên thủy đó - bạn sẽ so sánh các đối tượng được lưu trữ với 'object.getClass()'.(getClass() không thực sự là một cuộc gọi chậm) – millimoose