是否可以自定义cljs.reader/read-string
来处理"#(f 123)"
?
我试过了:
(cljs.reader/register-tag-parser! \( (fn [x] "test"))
(cljs.reader/read-string "#(f 123")
但得到:
无法找到标签解析器(f in(“inst”“uuid”“queue”“js”“(”)
的更新
(simple-tests pprint-reader-macro-test
;;I'm not sure this will work without significant work on cljs. Short story, cljs
;;reader only takes valid EDN, so #(* % %) won't work.
;;see http://stackoverflow.com/a/25712675/546321 for more details
#_(with-pprint-dispatch code-dispatch
(write (reader/read-string "(map #(first %) [[1 2 3] [4 5 6] [7]])")
:stream nil))
#_"(map #(first %) [[1 2 3] [4 5 6] [7]])"
答案 0 :(得分:0)
tagged literals中的标记需要是一个合格的符号(您可以使用不合格的符号,但不鼓励它)。符号不能包括括号(或其他分隔符),因为clojure(脚本)代码需要是有效的s表达式。
但是,如果你想对它持开放态度,可以从错误消息中看到cljs读者认为标记是(f
而不是(
。所以,如果你这样做
(cljs.reader/register-tag-parser! "(f" (fn [x] "test"))
它会起作用(在当前的cljs中,它可能会在某些时候中断)。