user=> (case -1 -1 true false) true user=> (case [-1] [-1] true false) true user=> (case (int -1) -1 true false) true user=> (case [(int 1)] [1] true false) true user=> (case [(int -1)] [-1] true false) false
最后一个用例应该返回true,如同其他类似情况,
触发此问题的现实生活中的示例
(case [">" (compare 2 3)] [">" -1] true false) ;; 错误的语句返回false?
原因分析:这是由于case操作使用了hashCode而不是hashEq来进行哈希比较(未包裹在向量表时直接比较)以及负整数和负长的哈希不同而正整数哈希相同所导致的。
建议:让case使用hasheq而不是hashCode
补丁:0001-switch-to-hasheq-for-case.patch