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

欢迎!请查看关于页面以了解更多关于这个平台的信息。

+1
错误
已关闭

case遇到不匹配的分句时生成的错误信息使用str,导致nil被渲染为空字符串,以及没有引号的字符串。

例如

(let [x nil]
  (case x
    1 :a 2 :b))
;; =>
;; Unhandled java.lang.IllegalArgumentException
;; No matching clause for x:

而且可能令人困惑的是

(let [x "1"]
  (case x
    1 :a 2 :b))
;; =>
;; Unhandled java.lang.IllegalArgumentException
;; No matching clause for x: 1

使用pr-str更清晰地呈现nil"1"值,这样是否更清晰?

注意:Clojurescript也存在类似问题
https://ask.clojure.org/index.php/6575/improve-error-messages-using-instead-when-printing-objects

已记录:https://clojure.atlassian.net/browse/CLJ-2564

已用以下评注关闭:已发布

2 答案

0
 
最佳答案

修复在1.10.2-alpha2中

+3

有道理,已记录。

谢谢!在clojure.core源码中搜索,发现了一些其他可以应用pr-str的地方,以下是示例情况

(case nil
  nil 1 nil 2)

(even? "10")

(requiring-resolve nil)

(condp = nil)
...