如果数据读取器返回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视为非法值。显然,这个bug是原始数据读取器代码中的一个疏忽,而不是一个有意为之的功能。
这个补丁使用哨兵值将缺失的数据读取器情况与nil返回值情况区分开来。
补丁: clj-1139-2.patch