在Clojure中定义自己的读取宏

11

我想在Clojure中定义自己的读取宏:

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

有可能吗?

2个回答

13

在您的类路径顶部的 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"

这个技术在这里被描述:阅读器:标记文字

请注意,在实践中,应该对您的标记文字进行名称空间处理,因为所有非名称空间标记都为Clojure本身保留。


0

目前,Clojure不允许创建用户定义的读取器宏。这可能会在未来改变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接