我尝试定义一个Unicode数据字面量标签,惊讶地发现它抛出一个错误
(defn wrap-λ [expr]
`(fn [~'%] ~expr))
(set! *data-readers*
(assoc *data-readers*
'λ #'wrap-λ))
(read-string "#λ(inc %)")
;; => Execution error (ArrayIndexOutOfBoundsException) at lib/eval74486 (REPL:15).
;; Index 955 out of bounds for length 256
955是Unicode代码点\λ,错误提示它只支持ASCII范围。
堆栈跟踪的前几行
LispReader.java: 840 clojure.lang.LispReader$DispatchReader/invoke
LispReader.java: 285 clojure.lang.LispReader/read
LispReader.java: 216 clojure.lang.LispReader/read
LispReader.java: 205 clojure.lang.LispReader/read
这是预期的行为吗?Clojurescript没有这个问题
(cljs.reader/register-tag-parser! 'λ wrap-λ)
(cljs.reader/read-string "#λ(inc %)")
;; => (cljs.core/fn [% & args] (inc %))