问题
I would like to define my own reader macro in clojure:
(read-string "ßfoo")
=> (some_func :foo)
Is it possible?
回答1:
It is possible to create tagged literals by having a reader map in data_readers.clj
at the top of your classpath.
This must be in data_readers.clj
at the top of your classpath (usually src
directory).
{ß reader-demo.core/read-fn}
This goes into reader-demo.core
(defn some-func
[arg]
(str "some-func invoked with " arg))
(defn read-fn
[arg]
(-> arg
keyword
some-func))
Invoking
#ß foo
will return
"some-func invoked with :foo"
This technique is described here: The reader: Tagged literals
Notice that in practice you should namespace your tagged literals as all non-namespaced ones are reserved for Clojure itself.
回答2:
Currently, Clojure doesn't allow to create user defined reader macros. This might/might not change in the future.
来源:https://stackoverflow.com/questions/20677055/define-my-own-reader-macro-in-clojure