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