如果 data-reader 返回 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