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