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

欢迎!请查看关于页面以了解更多关于这个工作如何进行的信息。

+1
Errors
关闭

当 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)
...