我想在clojure中定义自己的阅读器宏:
(read-string "ßfoo")
=> (some_func :foo)
有可能吗?
答案 0 :(得分:10)
可以通过在类路径顶部的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本身保留的。
答案 1 :(得分:0)
目前,Clojure不允许创建用户定义的阅读器宏。这可能/将来可能不会改变。