编译器不会对新引用的特殊符号(或 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** 等特殊符号。
我希望有统一的特性:要么编译器根本不允许阴影特殊符号,要么阴影它们在所有情况下都有效。