¿Hay alguna manera en clojure para verificar la igualdad de las cadenas? es decir, necesito saber si sus contenidos son iguales, no la ubicación.¿Cómo comprobar la igualdad de cadenas en clojure sin invocar java.lang.String?
gracias.
¿Hay alguna manera en clojure para verificar la igualdad de las cadenas? es decir, necesito saber si sus contenidos son iguales, no la ubicación.¿Cómo comprobar la igualdad de cadenas en clojure sin invocar java.lang.String?
gracias.
Igualdad en Clojure (la función =
) siempre prueba el valor, no la identidad, por lo que dos cadenas son =
si tienen el mismo contenido.
Para la mayoría de los tipos de Java, incluida la cadena, Clojure =
se envía a Java .equals
. String.equals se define como "representa la misma secuencia de caracteres".
Si desea probar la identidad (¿Están estos punteros en la misma ubicación en la memoria?) Use la función identical?
.
(= "hello" (str "hel" "lo"))
; => true
La JVM tiene un grupo de cadenas que contiene a lo sumo una entrada por valor, por lo que la identidad y la igualdad de valores son la misma comparación. Hay maneras de usar StringBuilder.
y String.
donde esto no es estrictamente cierto, pero debido a que la función de igualdad de clojure llama a .equals
, se realizará una comparación de valores si las identidades son diferentes.
'(idéntico?" Hello "(str" hel "" lo "))' es falso. El conjunto de cadenas internas de Java es solo para cadenas que son constantes. Entonces '(idéntico?" Hola "" hola ")' es verdadero, pero tan pronto como calcule una cadena no será igual a cualquier otra. Puede forzar la búsqueda/almacenamiento en el grupo con '(idéntico?" Hola "(.intern (str" hel "" lo ")))' (verdadero) – amalloy
Necesito comparar un token de seguridad, entonces necesito una función que compruebe si el contenido es exactamente el mismo y no acepta comodines ni expresiones regex. ¿Sabes si la función = de clojure satisface mi necesidad o necesito una función más específica? – jonathanrz
Clojure '=' no usa comodines ni expresiones regulares. –