请分享您的看法,参加 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 投票
...