h1. 理由
当自动解析的关键字字面量的命名空间部分引用了一个未声明的别名时,读取器会产生一个错误,如下所示
user> ::foo/bar
RuntimeException 无效令牌:::foo/bar clojure.lang.Util.runtimeException (Util.java:221)
然而,对于符号来说,不存在这样的语法。这是诸如 {{clojure.spec.test.alpha/instrument}} 等函数中常见错误的原因,这些函数接受以 var 名为参数的限定符号。目前,此类符号字面量的首选表示法是语法引号,它当然接受任何命名空间。现在,当一个人不小心参考了象征性参数中的一个别名(这些别名在当前命名空间中尚未声明,例如当从一个命名空间移植代码到另一个命名空间时),那么具有与自动解析关键字相同的错误行为会非常有用。以 {{instrument}} 示例来说,人们最终可能会调用昂贵的真实函数而不仅仅是模拟,这可能是很容易忽视的。
h1. 建议的语法
这有点棘手。首先想到的是双反引号,如 {{``foo/bar}},但这已经有意义,并且很可能会在现有的宏中已使用。我想 {{%foo/bar}} 可能会起作用,尽管无疑没有保证它没有在实际的命名空间名称中使用。
h1. 状态
如您所见,我还没有对可能性的语法选项进行全面调查,而且我也还没有开始修改补丁。我只是想就这个问题征求意见,看看是否值得进一步 pursuing 解决这个问题。