在<生效https://www.surveymonkey.com/r/clojure2024>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
by

有道理,已记录。

by
谢谢!在 clojure.core 源代码中查找,我发现了几个其他位置可以使用 pr-str,以下是一些示例

(case nil
  nil 1 nil 2)

(even? "10")

(requiring-resolve nil)

(condp = nil)
...