我在使用 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)。
有什么想法或建议吗?
谢谢!