我惊讶地发现在 Clojure 中alpha 转换是不安全的:
Clojure> ((fn [o] (o 3 2)) +)
5
Clojure> ((fn [or] (or 3 2)) +)
3
Clojure> ((fn [def] (def 3 2)) +)
java.lang.RuntimeException: First argument to def must be a Symbol
(我希望所有三个片段都评估为 5)。
当涉及阴影和宏以及特殊形式时,符号解析的规则是什么?
我正在使用Try Clojure上的版本。