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