(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
来获取实际的阴影符号,这样您将得到内部阴影符号,并且它将具有正确的元数据。