Подтвердить что ты не робот

Как проверить равенство строк в clojure без вызова java.lang.String?

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

спасибо.

4b9b3361

Ответ 1

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

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

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

Ответ 2

(= "hello" (str "hel" "lo"))
; => true 

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