如果一个data-reader返回nil,reader会抛出java.lang.RuntimeException: No dispatch macro... 错误消息暗示,对于标签的第一个字符 whatever,没有相应的dispatch宏。
以下是一个简单的示例
`
user=> (binding [*data-readers* {'f/ignore (constantly nil)}]
(read-string "#f/ignore 42 10"))
RuntimeException: 没有找到派发宏为: f clojure.lang.Util.runtimeException (Util.java:219)
`
原始的reader代码没有区分没有data-reader和合适的data-reader返回nil的情况。因此,它变得困惑,试图找到一个派发宏,将其引向错误的代码路径,最后产生了一个误导性的错误消息。
原始的文档没有将nil视为非法值。显然,这个错误是在原始data-reader代码中的一次疏忽,而不是一个有意引入的功能。
这个修改使用了一个哨兵值来区分缺失的data-reader的情况下与nil返回值的情况。
修改: clj-1139-2.patch