Ответ 1
==
предназначен для сравнения чисел. Если любой из его аргументов не является числом, он всегда будет возвращать false:
(== :a :a)
; => false
Как вы можете видеть, говоря (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);
}
Используйте =
для сравнения сравнений вещей, которые могут не быть числами. Когда вы на самом деле имеете дело с числами, ==
должен быть несколько быстрее.