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/6570/improve-error-messages-using-instead-when-printing-objects

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

已关闭,备注为:已发布

2 答案

0 投票
 
最佳答案

1.10.2-alpha2 中已修复

+3 投票
by

有道理,已记录。

by
谢谢!我在clojure.core源代码中通过grep找到了一些可用于pr-str的其他类似地方,以下是示例情况

(case nil
  nil 1 nil 2)

(even? "10")

(requiring-resolve nil)

(condp = nil)
...