编译器不会对let绑定(或def)特殊符号提出异议,但绑定只在不在列表开头使用时才起作用。
这些起作用
(let [try :a] try) => :a (let [try (constantly :a)] (apply try :b)) => :a
这不行
(let [try (constantly :a)] (try :b)) => :b
这对于所有特殊符号都成立,不仅仅是对公开的如try和new,也包括内部的如fn**。
我期望行为一致:或者编译器根本不允许阴影特殊符号,或者阴影它们在所有情况下都起作用。