Каковы некоторые распространенные ошибки разработчиков Clojure и как их избежать?
Например; новички на Clojure считают, что функция contains? работает так же, как java.util.Collection#contains. Тем не менее, contains? будет работать аналогичным образом при использовании с индексированными коллекциями, такими как карты и наборы, и вы ищете данный ключ:
(contains? {:a 1 :b 2} :b)
;=> true
(contains? {:a 1 :b 2} 2)
;=> false
(contains? #{:a 1 :b 2} :b)
;=> true
При использовании с численно индексированными коллекциями (векторы, массивы) contains? только проверяет, что данный элемент находится в допустимом диапазоне индексов (на основе нуля):
(contains? [1 2 3 4] 4)
;=> false
(contains? [1 2 3 4] 0)
;=> true
Если задан список, contains? никогда не вернет true.