在REPL上,如果我定义
(def fits (map vector (take 10 (iterate inc 0))))
然后致电
(== [2] (nth fits 2))
我弄错了。
但是
(= [2] (nth fits 2))
返回true。
这是预期的吗?我试过(class [2])和(class(nth fit 2)并且都返回Persistent Vector。
答案 0 :(得分:55)
==
用于比较数字。如果它的任何一个参数不是数字,它将始终返回false:
(== :a :a)
; => false
正如您在REPL上(clojure.contrib.repl-utils/source ==)
所说的那样(当然,repl-utils
require
'),==
调用了equiv
方法clojure.lang.Numbers
。 clojure/lang/Numbers.java
的相关位(来自GitHub上的最新或接近最新提交):
static public boolean equiv(Object x, Object y){
return y instanceof Number && x instanceof Number
&& equiv((Number) x, (Number) y);
}
使用=
对可能不是数字的事物进行相等比较。当你实际处理数字时,==
应该更快一些。
答案 1 :(得分:7)
==是一种与数字无关的类型
(== 3 3.0)
;=> true
(= 3 3.0)
;=> false