我尝试定义一个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 %))