我在我的项目的data_readers.clj
文件中有我的读者文字,并且工作正常。如果我创建一个新项目,我可以使用我在依赖库中创建的读者文字吗?我没有看到使用/要求读者文字的方法。
例如,如果我有一个data_readers.clj
文件:
{ml/foo mylib.core.foo}
我可以从单独的项目中做#ml/foo some-arg
吗?
答案 0 :(得分:1)
在需要库之后,您可以通过多种方式进行操作:
1)绑定*data-readers*
(ns mylib.core)
(def foo identity)
(binding [*data-readers* (assoc *data-readers* 'ml/foo mylib.core/foo)]
(read-string "#ml/foo arg")) ;;=> arg
此外,您可以为所有标签绑定*default-data-reader-fn*
。参见example
Pro:本地影响,建议的方式,因为两个变量均标记为动态。
相反:不适用于clojure.edn
2)更改clojure.core/default-data-readers
(alter-var-root #'clojure.core/default-data-readers assoc 'ml/foo mylib.core/foo)
(clojure.edn/read-string "#ml/foo arg") ;;=> arg
(read-string "#ml/foo arg") ;;=> arg
Pro:适用于clojure.edn
。
相反:全局突变