Как проверить равенство строк в clojure, не вызывая java.lang.String? - PullRequest
36 голосов
/ 26 февраля 2010

Есть ли способ в clojure проверить равенство строк? то есть мне нужно знать, равно ли их содержимое, а не местоположение.

спасибо.

Ответы [ 2 ]

48 голосов
/ 27 февраля 2010

Равенство в Clojure (функция =) всегда проверяет значение, а не идентичность, поэтому две строки равны =, если они имеют одинаковое содержимое.

Для большинства типов Java, включая String, Clojure = отправляет в Java .equals. String.equals определяется как «представляет одинаковую последовательность символов».

Если вы хотите проверить идентичность (находятся ли эти указатели в одном и том же месте в памяти?), Используйте функцию identical?.

8 голосов
/ 26 февраля 2010
(= "hello" (str "hel" "lo"))
; => true 

JVM имеет пул строк, который содержит не более одной записи на значение, поэтому идентичность и равенство значений - это одно и то же сравнение.Существуют способы использования StringBuilder. и String., когда это не совсем верно, но поскольку функция равенства clojure вызывает .equals, сравнение значений будет выполнено, если идентичности различны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...