[ruby-it] Errore di conversione

Pietro Giorgianni giorgian a gmail.com
Lun 2 Mar 2009 16:20:49 CET


Il 2 marzo 2009 15.56, Stefano De nigris <stedenigris a hotmail.com> ha scritto:
>> /\bas\b/ (\b � delimitatore di parola, word delimiter)?
> Se faccio cosi lui mi cercherà solo le parole fatte da "as"???

esattamente, troverà "Application as blabla", ma non "ananas assale casa".

> Scusa perche non c'è questo elemento???Quando faccio partire il
> programma l'if viene eseguito,quindi significa che lo trova "as".

tu lavori su due oggetti completamente diversi: uno è primariga, che è
un array di lunghezza 1, l'altro è una stringa.

ad esempio, 1 e [1] sono diversi, non hanno assolutamente niente in
comune; tanto per dire: 1 + 1 fa 2, [1] + [1] fa [1, 1].

>>ma d'altronde: una volta che fai la ricerca di as, perch� fai di nuovo
>> la ricerca di as?
>> basterebbe:
>> if as = /\bas\b/ =~ primariga.to_s
>> puts as
>> end
> Ma se faccio cosi l'if posso fare poi: puts primariga[as]???

no, o meglio: non ha senso, perché primariga è un array con un solo
elemento, quindi solo primariga[0] è definito.

ma è inutile eseguire più volte il metodo to_s sullo stesso oggetto, e
d'altronde è un modo brutto di procedere.

la cosa più semplice è che assegni primariga[0] a qualche variabile, che so:

riga = primariga[0]

ora riga contiene una stringa, quindi puoi fare:

if as = /\bas\b/ =~ riga
  puts riga[as]
end

nota però che il risultato sarà deludente: verrà stampato
97

questo perché riga è una stringa, ma riga[as] è un carattere, e
precisamente il carattere che si trova alla posizione in cui inizia
"as", ovvero è la lettera a, ovvero il carattere 97.

puoi vederlo eseguendo, in irb:

97.chr

spero di essere stato d'aiuto.


p.s. continuo a sostenere che con le regular expression non è
possibile scrivere un parser degno di questo nome, tanto per dire, non
è possibile controllare il bilanciamento delle parentesi; però, se lo
scopo è solo didattico, senza dubbio è un ottimo esercizio.

pietro


More information about the Ml mailing list