我想分析一个外部code代码的文件。我目前正在使用clojure.tools.reader读取所有表单:
(require '[clojure.tools.reader :as reader])
(defn read-all-forms [f]
(let [rdr (indexing-push-back-reader (slurp f))
EOF (Object.)
opts {:eof EOF}]
(loop [ret []]
(let [form (reader/read opts rdr)]
(if (= EOF form)
ret
(recur (conj ret form)))))))这通常有效,除非遇到引用别名的双冒号关键字。示例:
(ns foo
(:require [foo.bar :as bar]))
::bar/baz在以下方面失败:
ExceptionInfo Invalid token: ::bar/baz
是否有一种方法可以使用clojure.tools.reader来读取文件并解析像这样的关键字?我是否应该自己跟踪*alias-map*呢?
发布于 2017-05-09 15:16:21
如果绑定,tools.reader将使用clojure.tools.reader/*alias-map*,否则它将使用(ns-aliases *ns*)解析别名。因此,如果您的文件中有自动解析关键字,则需要使用其中一种方法来允许自动解析别名被解析。
https://stackoverflow.com/questions/43872348
复制相似问题