[英]= and == in Clojure
在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。
==
用於比較數字。 如果它的任何一個參數不是數字,它將始終返回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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.