相关疑难解决方法(0)

Clojure#=读者宏

我刚从Stackoverflow上#=帖子 "发现"了读取器宏,它解决了一个问题.这个读者宏观有多大可能成为该语言的官方(文档)部分?如何弃用或改变行为?

所述#=读取器宏导致以下s表达式由Lisp的读取器进行评估(宏膨胀之前).

macros clojure

13
推荐指数
1
解决办法
1425
查看次数

带类的Clojure案例陈述

我想打开给定对象的类以对其进行编码.

(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 "~"
  )
 )
Run Code Online (Sandbox Code Playgroud)

当我打电话时(encoded-msg-for {}),它会返回No matching clause: class clojure.lang.PersistentArrayMap

奇怪的是,将案例放入哈希映射(将类作为键和字符串作为值)非常有效.

也是的,(= (class {}) clojure.lang.PersistentArrayMap)是的.在这里进行了什么比较,我如何切换对象本身的类或(更好)在其层次结构中的某些东西?

class clojure switch-statement

9
推荐指数
2
解决办法
2942
查看次数

标签 统计

clojure ×2

class ×1

macros ×1

switch-statement ×1