问题
I'm working on a multimethod that needs to update a hash for a bunch of different things in a sequence. Looked fairly straitforward until I tried to enter the 'type of an array of X'.
(defmulti update-hash #(class %2))
(type (byte 1))
=> java.lang.Byte
(defmethod update-hash java.lang.Byte [md byte]
(. md update byte))
(type (into-array [ (byte 1)]))
=> [Ljava.lang.Byte;
(defmethod update-hash < WHAT GOES HERE > [md byte]
回答1:
Either of these should work:
(defmethod update-hash (Class/forName "[Ljava.lang.Byte;") [md byte] ...)
(defmethod update-hash (class (make-array Byte 0)) [md byte] ... )
来源:https://stackoverflow.com/questions/2782901/how-to-dispatch-a-multimethod-on-the-type-of-an-array