我想分析一个外国clojure代码的文件。我目前正在使用propertyCardsShuffledOriginalArray
阅读所有表单:
clojure.tools.reader
这通常有效,除非它遇到引用别名ns的双冒号关键字。例如:
(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
有没有办法使用clojure.tools.reader来读取文件并解决这样的关键字?我应该以某种方式跟踪ExceptionInfo Invalid token: ::bar/baz
我自己吗?
答案 0 :(得分:3)
tools.reader如果绑定则使用clojure.tools.reader/*alias-map*
,否则使用(ns-aliases *ns*)
来解析别名。因此,如果您的文件中有自动解析的关键字,则需要使用其中一种方法来解析自动解析的别名。