在REPL上,如果我定义
(def fits (map vector (take 10 (iterate inc 0))))
Run Code Online (Sandbox Code Playgroud)
然后打电话
(== [2] (nth fits 2))
Run Code Online (Sandbox Code Playgroud)
我弄错了.
但
(= [2] (nth fits 2))
Run Code Online (Sandbox Code Playgroud)
返回true.
这是预期的吗?我试过(class [2])和(class(nth fit 2)并且都返回Persistent Vector.
Mic*_*zyk 55
==用于比较数字.如果它的任何一个参数不是数字,它将始终返回false:
(== :a :a)
; => false
Run Code Online (Sandbox Code Playgroud)
正如你(clojure.contrib.repl-utils/source ==)在REPL中所说的那样(repl-utils require当然是'd),==调用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);
}
Run Code Online (Sandbox Code Playgroud)
用于=对可能不是数字的事物进行相等比较.当你实际上处理数字时,==应该更快一些.