Как проверить равенство строк в clojure без вызова java.lang.String?
Есть ли способ в clojure проверить равенство строк?
то есть мне нужно знать, равно ли их содержимое, а не местоположение.
спасибо.
Ответ 1
Равенство в Clojure (функция =) всегда проверяет значение, а не идентификатор, поэтому две строки =, если они имеют одинаковое содержимое.
Для большинства типов Java, включая String, Clojure = отправляется на Java .equals. String.equals определяется как "представляет одну и ту же последовательность символов".
Если вы хотите проверить личность (эти указатели находятся в одном месте в памяти?), используйте функцию identical?.
Ответ 2
(= "hello" (str "hel" "lo"))
; => true
JVM имеет пул строк, который содержит не более одной записи на каждое значение, поэтому идентичность и равенство значений являются тем же самым сопоставлением. Существуют способы использования StringBuilder. и String., где это не строго верно, но поскольку функция равенства clojure вызывает .equals, сравнение значений будет выполняться, если идентичность отличается.