【发布时间】:2013-12-19 08:50:16
【问题描述】:
我想在 clojure 中定义我自己的阅读器宏:
(read-string "ßfoo")
=> (some_func :foo)
有可能吗?
【问题讨论】:
标签: clojure clojurescript
我想在 clojure 中定义我自己的阅读器宏:
(read-string "ßfoo")
=> (some_func :foo)
有可能吗?
【问题讨论】:
标签: clojure clojurescript
可以通过在类路径顶部的data_readers.clj 中使用阅读器映射来创建标记文字。
这必须在类路径顶部的data_readers.clj 中(通常是src 目录)。
{ß reader-demo.core/read-fn}
这进入 reader-demo.core
(defn some-func
[arg]
(str "some-func invoked with " arg))
(defn read-fn
[arg]
(-> arg
keyword
some-func))
调用
#ß foo
会回来
"some-func invoked with :foo"
这里描述了这种技术:The reader: Tagged literals
请注意,实际上您应该为您的标记文字命名,因为所有非命名空间的文字都是为 Clojure 本身保留的。
【讨论】:
目前,Clojure 不允许创建用户定义的阅读器宏。这在未来可能/可能不会改变。
【讨论】: