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

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

спасибо.

36
задан Maksim Skurydzin 25 February 2010 в 21:51
поделиться

2 ответа

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

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

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

52
ответ дан 27 November 2019 в 05:57
поделиться
(= "hello" (str "hel" "lo"))
; => true 

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

8
ответ дан 27 November 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: