h1. 理由
当自动解析关键字字面量的命名空间组件指代一个未声明的别名时,读取器会产生一个错误,如下所示
user> ::foo/bar
RuntimeException 无效令牌:::foo/bar clojure.lang.Util.runtimeException (Util.java:221)
然而,对于符号,没有这样的语法。这是在像{{clojure.spec.test.alpha/instrument}}等函数中常见的错误源,该函数将变量名称的限定符号作为参数接受。目前,此类符号字面量的首选符号引用是语法引号,它当然接受任何命名空间。现在,当不小心在那些符号参数中引用一个在当前命名空间中没有声明的别名时(例如,将某些代码从一个命名空间移植到另一个命名空间),拥有与自动解决关键字相同的错误行为将会非常有用。以{{instrument}}为例,您将调用潜在昂贵的真实函数而不是模拟函数,这可能会很容易被忽略。
h1. 建议的语法
这有点棘手。首先想到的是双反引号,如{{``foo/bar}},但这已经具有意义,并且可能已经在现有的宏中使用。我想{{%foo/bar}}也可以工作,尽管当然没有保证这已经在实际的命名空间名称中使用。
h1. 状态
如您所见,我还没有对可能的语法选项进行广泛的研究,也没有开始着手修复。只是想就这个问题征求意见,看看是否值得进一步追求。