2024Clojure状态调查中分享您的想法!

欢迎!请参阅关于页面获取更多关于如何使用本站的信息。

+3
语法和读取器
编辑

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

1 答案

+1

我不确定它是否明确规定,但根据其实现方式,我没有发现这个错误令人惊讶,但它似乎不应该是这种限制。

登录为https://clojure.atlassian.net/browse/CLJ-2623

...