2013-04-20 12 views
5

Sto giocando con l'analisi del testo nel REPL, ea volte voglio riversare un gruppo di dati in una stringa, sia che si tratti di una voce bibtex o di una notazione EBNF ecc. In genere potrebbero esserci virgolette nella stringa, e è molto noioso e soggetto a errori di avere a loro fuggire manualmente ..Un modo semplice per lavorare con il testo senza dover evadere dalle virgolette in Clojure?

esiste un modo alternativo di fare questo, come ad esempio Ruby %Q|I possono utilizzare "Quotation Marks"| o heredocs ecc? O sarebbe possibile scrivere una macro o una modifica del lettore per abilitare questo?

+0

Questo è qualcosa che ho voluto troppo. Un modo in cui puoi aggirarlo per i dati è leggerlo da un file con 'slurp'. – DaoWen

+0

Stai "scaricando" nel tuo codice runtime o nel tuo editor. Se più tardi, vedi questa domanda: http://stackoverflow.com/questions/11043318/does-clojure-have-raw-string – noahlz

+0

Che editor stai usando? Il mio approccio abituale per questo tipo di cose è di usare un editor con una funzione di incollaggio intelligente che aggiunge le fughe per me. – Korny

risposta

0

C'è stato some discussion su una sintassi di quotatura più robusta, ma nessuna modifica per supportarlo sembra imminente.

Nel frattempo, per gestire specificamente l'interazione REPL che hai citato, potresti trovare utile questo. Nota che probabilmente non funziona per ogni REPL là fuori - non tutti sostegno read-line terribilmente bene:

 
(defn read-lines [] 
    (->> (repeatedly read-line) 
     (take-while #(not= % ".")) 
     (mapcat #(list % "\n")) 
     (apply str))) 

Utilizzare eseguendo (read-lines) al REPL, incollare il contenuto, e quindi aggiungendo una linea con un . di per sé:

 
user=> (read-lines) 
    #_=> This "works" 
    #_=> sometimes... 
    #_=> . 
"This \"works\"\nsometimes...\n" 
user=> (print *1) 
This "works" 
sometimes... 
nil 
-1

ne dite di semplicemente utilizzando un temp-file in cui si dump il testo e poi leggerlo da lì usando slup? In questo modo tutto viene automaticamente sfuggito ogni volta che lo chiami?

(slurp "tempfile.txt") 

o

(def data (slurp "tempfile.txt")) 

o

(defn rd [] (def data (slurp "tempfile.txt"))) 
Problemi correlati