如何使Clojure的tools.analyzer忽略验证步骤?

4

我想要解决的初始任务是为任意Clojure代码构建AST。所以Google建议使用https://github.com/clojure/tools.analyzer.jvm来实现这个目的。我尝试在简单的Clojure表单(print x)上使用这个库,但是出现了异常消息无法解析变量:x。我曾经认为构建AST是一个简单的过程,没有像验证、解析变量等副作用。而且奇怪的是,没有关于如何省略这个变量解析步骤的清晰文档。


1
我尝试了一个选项:validate/unresolvable-symbol-handler - (aj/analyze '(print x) (assoc (aj/empty-env) :passes-opts {:validate/unresolvable-symbol-handler (fn [a b c] (print a)) })) ,但没有成功。 - hsestupin
1个回答

1
所以我找到了答案。必须将:validate/unresolvable-symbol-handler作为第三个参数传递,并且要使用:passes-opts(而不是我尝试的放在environment内部)。
(clojure.tools.analyzer.jvm/analyze '(print x) 
    (clojure.tools.analyzer.jvm/empty-env)
    {:passes-opts {:validate/unresolvable-symbol-handler
                                     (fn [a b c] nil)}})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接