簡體   English   中英

在Clojure中=和==

[英]= 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.Numbersequiv方法。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM