如果 data-reader 返回 nil,读取器将抛出 java.lang.RuntimeException: 无分发宏... 错误信息暗示没有针对标签的第一个字符所对应分发宏。
这里有一个简单的例子
`
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