[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