繁体   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