编译器不会对 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** 这样的内部符号。
我期望得到一致的行为:要么编译器根本不允许遮挡特殊符号,要么遮挡特殊符号在所有情况下都有效。