我想在Clojure中定义自己的读取宏:
(read-string "ßfoo")
=> (some_func :foo)
有可能吗?
我想在Clojure中定义自己的读取宏:
(read-string "ßfoo")
=> (some_func :foo)
有可能吗?
在您的类路径顶部的 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本身保留。
目前,Clojure不允许创建用户定义的读取器宏。这可能会在未来改变。