编译器不会对 let 绑定(或 def-ing)特殊符号提出抱怨,但只有在不用于列表开头时,绑定才会生效
这些是有效的
(let [try :a] try) => :a (let [try (constantly :a)] (apply try :b)) => :a
这不会生效
(let [try (constantly :a)] (try :b)) => :b
这适用于所有特殊符号,而不仅仅是像 try 和 new 这样的公开暴露的特殊符号,还包括像 fn** 这样的内部特殊符号。
我期望有一个一致的行为:要么编译器完全不允许阴影特殊符号,要么在任何情况下,阴影特殊符号都能工作。