szy*_*ski 8 clojure clojurescript
我想在clojure中定义自己的阅读器宏:
(read-string "ßfoo")
=> (some_func :foo)
Run Code Online (Sandbox Code Playgroud)
可能吗?
Leo*_*hin 10
可以通过在data_readers.clj类路径顶部放置读取器映射来创建标记文字.
这必须位于data_readers.clj类路径的顶部(通常是src目录).
{ß reader-demo.core/read-fn}
Run Code Online (Sandbox Code Playgroud)
这进入了reader-demo.core
(defn some-func
[arg]
(str "some-func invoked with " arg))
(defn read-fn
[arg]
(-> arg
keyword
some-func))
Run Code Online (Sandbox Code Playgroud)
调用
#ß foo
Run Code Online (Sandbox Code Playgroud)
将返回
"some-func invoked with :foo"
Run Code Online (Sandbox Code Playgroud)
这里描述了这种技术:读者:标记文字
请注意,在实践中,您应该对标记的文字进行命名,因为所有非命名空间的文本都是为Clojure本身保留的.