编译器不会对 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** 这样的内部特殊符号。
我期待的是一致的行为:或者编译器绝对不允许影射特殊符号,或者影射它们在所有情况下都有效。