2024 Clojure 状态调查!中分享您的想法。

欢迎!有关此工作原理的更多信息,请参阅关于页面。

+1
编译器
重新标记
(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 来获取实际的阴影符号,在这种情况下,您将获得内部阴影符号,它将具有正确的元数据。

1 答案

+1
...