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

欢迎!请查看关于页面以获取更多关于如何使用的详细信息。

+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

...