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. 状态
正如你所见到的,我还没有对可能的语法选项进行广泛的调查,也没有开始编写补丁。我只是想征求对这个问题的看法,看看它是否值得进一步追究。