Clojure嵌套标记文字

Hen*_*gon 6 clojure literals

我正在尝试解析PriorityMaps的嵌套结构:

(def reader-map
 {
   'util/pm (fn [x] (println "reading > " x) (parse-map x))
})

(binding [*data-readers* reader-map]
    (clojure.core/read-string "#util/pm \"{:z 4 :y #util/pm \"{:y 3 :x 3}\" :x 9}\""))
Run Code Online (Sandbox Code Playgroud)

...但是我没有看到嵌套的字符串像我期望的那样传递到我的处理程序中,只看到第一个嵌套标记的字符串:

 reading >  {:z 4 :y #er.util.net/pm
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Dao*_*Wen 5

如果需要嵌套引号,则需要更多反斜杠:

(binding [*data-readers* reader-map]
    (clojure.core/read-string "#util/pm \"{:z 4 :y #util/pm \\\"{:y 3 :x 3}\\\" :x 9}\""))
Run Code Online (Sandbox Code Playgroud)

  • @Hendekagon与标签关联的值不必是字符串; 它可以是任何正常可读的Clojure数据结构.像"#util/pm {:z 4:y#util/pm {:y 3:x 3}}"这样的东西可以工作,AFAIK. (3认同)