h1. 理由
当自动解析关键字的命名空间部分引用未声明的别名时,读取器会产生错误,如下所示:
user> ::foo/bar
RuntimeException 无效的标记:::foo/bar clojure.lang.Util.runtimeException (Util.java:221)
然而,对于符号,不存在此类语法。这是函数如 {{clojure.spec.test.alpha/instrument}} 出现错误的一个常见来源,该函数接受变量名称的限定符号作为参数。目前,此类符号字面量的首选表示法是语法引号,它当然接受任何命名空间。现在,如果在一个诸如 symbolic arguments 之一的符号 arguments 中意外地引用了一个当前命名空间中没有声明的别名(例如,当将一些代码从一个命名空间移植到另一个命名空间时),将非常有用,有与自动解析关键字相同的错误行为。以 {{instrument}} 为例,最终会调用昂贵的实际函数而不是模拟函数,而这些模拟函数可能会很容易地被忽略。
h1. 建议的语法
这有些棘手。最先想到的是双反引号,例如 {{``foo/bar}},但这已经有意义了,并且在现有的宏中可能会被使用。我猜测 {{%foo/bar}} 可能可行,尽管当然不能保证这不会在实际命名空间名称中使用。
h1. 状态
正如您所知,我尚未对可能的语法选项进行广泛调查,也没有开始编写补丁。只是想征求对此问题的意见,看看是否值得进一步追求。