Я хочу включить класс данного объекта, чтобы закодировать его.
(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)
. Какое сравнение здесь происходит и как я могу переключить либо класс самого объекта, либо (лучше )что-то в его иерархии?