Here-Document indentati

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


Gli here document sono quella parte della sintassi di ruby (ripresa da perl che ha sua volta la riprense dalle shell unix) che permette di inserire dei blocchi di codice lunghi enza preoccuparsi di fare l’escape dei contenuti.

Quindi invece di scrivere
foo= "\bla bla \"bla\"" 
potete usare la sintassi alternativa con i %
foo = %{bla bla "bla"}
notate che si sono usate delle parentesi graffe per delimitare il testo ma in realtà potete usare qualsiasi carattere, ad esempio scrivendo
foo= %| codice con {graffe} delimitato da pipe|
Oppure potete usare la sintassi perl-like:
foo = <<Eot
bla bla "bla" bl
...
"foo" bar baz
Eot

Eot sta in questo caso per “end of text” ma in realtà potete usare una qualsiasi parola, come ad esempio “FINE_TESTO”, o una qualsiasi parola che pensate non sia presente nel testo.

Se usata questa sintassi è necessario stare attenti al fatto che la parola che funge da delimitatore deve essere all’inizio di una linea, il che è brutto se la usate in un pezzo di codice indentato. Per far si che ruby consideri come delimitatore una parola anche se indentata si deve aggiungere un - all’inizio:

def foo
 x= <<-FINE
  ...
 FINE
end

Questo però crea un altro sub problema: adesso vi trovate con un sacco di spazi prima del testo!

Finché si tratta di scrivere codice che deve essere usato dall’interprete tramite eval() o simili questo va benissimo, ma se ad esempio dovete mostrarlo a schermo verrà fuori incasinato.

Un’ottima soluzione è usare String#margin() che è fornito dalla libreria Facets, e che è documentata in questa pagina

Updated on February 02, 2006 20:45 by Ruby Fan (151.37.96.139)