我想打开给定对象的类以对其进行编码。
(defn encoded-msg-for [msg]
(case (class msg)
java.lang.Double (encode-double msg)
java.lang.String (encode-str msg)
java.lang.Long (encode-int msg)
java.lang.Boolean (encode-bool msg)
clojure.lang.PersistentArrayMap (encode-hash msg)
clojure.lang.PersistentVector (encode-vec msg)
nil "~"
)
)
当我打电话时(encoded-msg-for {})
,它会返回No matching clause: class clojure.lang.PersistentArrayMap
奇怪的是,将案例放入哈希映射(类作为键,字符串作为值)效果很好。
还有,(= (class {}) clojure.lang.PersistentArrayMap)
是真的。这里发生了什么比较,我如何切换对象本身的类或(更好)其层次结构中的某些东西?