编译器不会对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**这样的内部符号。
我期望行为一致:编译器要么完全不允许对特殊符号进行阴影,要么在任何情况下都能进行阴影。