编译器不会对 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** 这样的内部特殊符号。
我期望有一致的行为:编译器不允许在任何情况下阴影特殊符号,或者阴影它们在任何情况下都有效。