2012-06-15 17 views
14

En Python, puedo de prefijo de una r a un literal (cadena de texto) cadena para decirle al intérprete no traducir los caracteres especiales en la cadena:¿Tiene clojure una cuerda sin procesar?

>>> r"abc\nsdf#$%\^" 
r"abc\nsdf#$%\^" 

¿Hay una manera de hacer la misma cosa en Clojure?

Respuesta

14

Las cadenas Clojure son cadenas de Java y el lector no agrega nada significativo a su interpretación. The reader page solo dice "se admiten caracteres de escape Java estándar".

Puede escapar de la \ sin embargo:

user> (print "abc\\nsdf#$%\\^") 
abc\nsdf#$%\^ 

Esto sólo afecta a los literales de cadena leídos por el lector, por lo que si usted lee las cadenas de un archivo del lector nunca los ve:

user> (spit "/tmp/foo" "abc\\nsdf#$%\\^") 
nil 
user> (slurp "/tmp/foo") 
"abc\\nsdf#$%\\^" 
user> (print (slurp "/tmp/foo")) 
abc\nsdf#$%\^nil 
user> 

Así , Creo que la respuesta básica es no.

2

Puede ser útil para una expresión regular literal para tales fines.

user=> #"abc\nsdf#$%\^" 
#"abc\nsdf#$%\^" 
user=> (type #"abc\nsdf#$%\^") 
java.util.regex.Pattern 
user=> (println (str #"abc\nsdf#$%\^")) 
abc\nsdf#$%\^ 
nil 
+1

Bueno, quizás esto sea malo. – BLUEPIXY

5

Tenga en cuenta también que si usted está utilizando en sentido antihorario (el plugin Eclipse para Clojure), hay un modo, llamado "Pegado inteligente" (desactivado por defecto) que se encarga de escapar correctamente los caracteres especiales cuando se pegar dentro de una Cadena literal existente.

Cuestiones relacionadas