在REPL,如果我定義=和== Clojure中
(def fits (map vector (take 10 (iterate inc 0))))
,然後調用
(== [2] (nth fits 2))
我得到錯誤的。
但
(= [2] (nth fits 2))
返回true。
這是預期嗎?我試過(類[2])和(類(第n擬合2)都返回持久矢量
在REPL,如果我定義=和== Clojure中
(def fits (map vector (take 10 (iterate inc 0))))
,然後調用
(== [2] (nth fits 2))
我得到錯誤的。
但
(= [2] (nth fits 2))
返回true。
這是預期嗎?我試過(類[2])和(類(第n擬合2)都返回持久矢量
==
是比較數字如果任其參數是不是一個數字,它總是返回false:。
(== :a :a)
; => false
你可以通過在REPL說(clojure.contrib.repl-utils/source ==)
看到(帶repl-utils
require
「d當然,),==
調用的clojure.lang.Numbers
的equiv
方法的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);
}
使用=
進行等式比較的可能不是數字的東西。當你實際上處理號碼時,==
應該稍微快一些。
==是比較數字
(== 3 3.0)
;=> true
(= 3 3.0)
;=> false
感謝米哈爾的類型無關的方式! – 2010-03-03 16:12:45
不客氣。 :-) – 2010-03-03 19:44:52