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