如果数据读取器返回nil,则读取器会抛出java.lang.RuntimeException: No dispatch macro... 错误消息暗示对于标签的第一个字符没有相应的分配宏。
这里有一个简单的例子
`
user=> (binding [*data-readers* {'f/ignore (constantly nil)}]
(read-string "#f/ignore 42 10"))
RuntimeException 没有分配宏对于: f clojure.lang.Util.runtimeException (Util.java:219)
`
原始的读取器代码没有区分没有数据读取器和适当数据读取器返回的nil值。因此,它感到困惑,并试图找到一个分配宏,使其沿着错误的代码路径继续,最后产生误导性的错误消息。
原始文档没有区分nil作为非法值。显然,这个错误是原始数据读取器代码中的一个疏忽,而不是一个故意的功能。
补丁使用了哨兵值来区分缺少数据读取器的情况和返回nil值的情况。
补丁: clj-1139-2.patch