2012-06-15 8 views
14

In Python, posso prefisso un r ad una stringa letterale (stringa crudo) per raccontare l'interprete non traduce i caratteri speciali nella stringa:Il clojure ha una stringa raw?

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

C'è un modo per fare la stessa cosa in Clojure?

risposta

14

Le stringhe Clojure sono stringhe Java e il lettore non aggiunge nulla di significativo alla loro interpretazione. The reader page dice semplicemente "sono supportati i caratteri di escape Java standard".

Si può sfuggire la \ però:

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

Questo influisce solo letterali stringa letto dal lettore, quindi se avete letto le stringhe da un file che il lettore non li vede:

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

Così , Penso che la risposta di base sia no.

2

Può essere utile per un'espressione regolare letterale per tali scopi.

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

Beh, forse questo è male. – BLUEPIXY

5

Si prega di notare, inoltre, che se si sta utilizzando in senso antiorario (il plugin Eclipse per Clojure), c'è una modalità, chiamata "pasta intelligente" (disabilitato per impostazione predefinita), che si prende cura di sfuggire correttamente i caratteri speciali quando si incolla all'interno di una stringa letterale esistente.