(defmacro inspect
[& body]
(println (keys &env) (map meta (keys &env)))
`(do ~@body))
(let [^:1 a 1]
(let [^:2 a 2]
(let [^:3 a 3]
(inspect "hello"))))
;;=> (a) ({:1 true})
"hello"
&env
形式返回一个 {sym LocalBinding}
的映射,其中映射的键上的符号应该是局部符号,但从上述代码中看到,当局部符号发生阴影时,映射中似乎不包含阴影符号,而是包含被阴影的符号。我们可以看到它返回的是最外层的符号的元数据,而不是阴影它的内部符号。
在我看来,这是一个错误,但您仍然可以通过在 LocalBinding 上调用 .-sym
来获取实际的阴影符号,在这种情况下,您将获得内部阴影符号,它将具有正确的元数据。