在clojure中定义我自己的阅读器宏

时间:2013-12-19 08:50:17

标签: clojure clojurescript

我想在clojure中定义自己的阅读器宏:

(read-string "ßfoo")
=> (some_func :foo)

有可能吗?

2 个答案:

答案 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不允许创建用户定义的阅读器宏。这可能/将来可能不会改变。