我正在使用 clojure.tools.reader/read 从文件中读取 clojure 和 cljs 形式。
一切正常,但命名空间关键字,如 ::keyword
,会被读取为 :user/keyword。
我知道读取器使用 ns 动态变量来确定读取符号和关键字的当前命名空间,但不知道如何使用它来读取一个不存在的命名空间,比如我正在读取的文件中的命名空间。
我尝试在读取之前使用 (in-ns file-ns-symbol) 来创建命名空间,这确实有效,但有时我会得到 java.lang.IllegalStateException: Can't change/establish root binding of: *ns* with set
错误。
只做
(binding [*ns* file-ns-symbol]
(reader/read ...))
是行不通的,因为这将尝试对一个不存在的命名空间调用 (the-ns file-ns-symbol)。
对此有什么想法或提示吗?
谢谢!