# Errore di conversione

**URL:** <https://www.ruby-forum.com/t/errore-di-conversione/161576>\
**Category:** IT\
**Created:** [February 27, 2009, 3:33pm UTC](https://www.ruby-forum.com/t/errore-di-conversione/161576 "2009-02-27T15:33:42Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [February 27, 2009, 3:33pm UTC](https://www.ruby-forum.com/t/errore-di-conversione/161576/1 "2009-02-27T15:33:42Z")

</div>

Ciao ragazzi,ho un problema…io ho una frase memorizzara in un array:

result=(Application as TApacheTwoApplication).ProcessRequest

a me interessa l’ “as”,cioÃ¨ vorrei sapere a che elemento dell’array  
corrisponde quella parola,e ho fatto cosi:

if /as/ =~ primariga.to\_s  
as=primariga.index “as”  
puts primariga[as]  
end  
dove in primariga vi Ã¨ memorizzata tutta la frase.Successivamente ho  
fatto un index in primariga,dandomi come risultato 1 (il che Ã¨ corretto  
in quanto si “as” si trova nell’elemento 1 dell’array).Tuttavia il mio  
problema Ã¨ quando faccio il puts che mi da un errore di conversione da  
nil a integer.Cosa sbaglio e come posso risolverlo???

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [February 27, 2009, 4:02pm UTC](https://www.ruby-forum.com/t/errore-di-conversione/161576/2 "2009-02-27T16:02:04Z")

</div>

2009/2/27 Stefano De nigris [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Ciao ragazzi,ho un problema…io ho una frase memorizzara in un array:
> 
> result=(Application as TApacheTwoApplication).ProcessRequest
> 
> a me interessa l’ “as”,cioè vorrei sapere a che elemento dell’array  
> corrisponde quella parola,e ho fatto cosi:
> 
> if /as/ =~ primariga.to\_s

cosa è primariga? parli di frase memorizzata in un array. che vuol dire?

vuol dire questo?

[‘result=(Application as TApacheTwoApplication).ProcessRequest’]

se è così, stiamo cercando la regexp /as/ dentro

‘result=(Application as TApacheTwoApplication).ProcessRequest’

cioè primariga.to\_s.

nota: /as/ cerca una a seguita da una s, come in casa. forse cerchi  
/\bas\b/ (\b è delimitatore di parola, word delimiter)?

> as=primariga.index “as”

ecco, qui è necessario capire cos’è primariga. se è quello che ho  
scritto io sopra, primariga.index[‘as’] vale nil, perché non c’è un  
elemento ‘as’ nell’array.

> puts primariga[as]

ecco, se primariga è un array, e as vale nil, primariga[as] dà  
esattamente quell’errore  
lì.  
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

o peggio:

puts as if as = /\bas\b/ =~ primariga.to\_s

naturalmente continuo a non sapere com’è fatto primariga, quindi  
chissà.  
l’unica cosa certa è che l’array primariga non contiene l’elemento ‘as’.

pietro

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [March 2, 2009, 3:56pm UTC](https://www.ruby-forum.com/t/errore-di-conversione/161576/3 "2009-03-02T15:56:46Z")

</div>

> cosa ï¿½ primariga? parli di frase memorizzata in un array. che vuol dire?
> 
> vuol dire questo?
> 
> [‘result=(Application as TApacheTwoApplication).ProcessRequest’]  
> Si Ã¨ questo,scusa se non sono abbastanza chiaro ma Ã¨ colpa del mio  
> italiano.

> se ï¿½ cosï¿½, stiamo cercando la regexp /as/ dentro  
> ‘result=(Application as TApacheTwoApplication).ProcessRequest’  
> cioï¿½ primariga.to\_s.  
> Infatti sto cercando “as” dentro a primariga.

> nota: /as/ cerca una a seguita da una s, come in casa. forse cerchi  
> /\bas\b/ (\b ï¿½ delimitatore di parola, word delimiter)?  
> Se faccio cosi lui mi cercherÃ solo le parole fatte da “as”???

> ecco, qui ï¿½ necessario capire cos’ï¿½ primariga. se ï¿½ quello che ho  
> scritto io sopra, primariga.index[‘as’] vale nil, perchï¿½ non c’ï¿½ un  
> elemento ‘as’ nell’array.  
> Scusa perche non c’Ã¨ questo elemento???Quando faccio partire il  
> programma l’if viene eseguito,quindi significa che lo trova “as”.

> 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]???

Ciao a tutti!!!

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [March 2, 2009, 4:21pm UTC](https://www.ruby-forum.com/t/errore-di-conversione/161576/4 "2009-03-02T16:21:16Z")

</div>

Il 2 marzo 2009 15.56, Stefano De nigris [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [March 3, 2009, 7:05pm UTC](https://www.ruby-forum.com/t/errore-di-conversione/161576/5 "2009-03-03T19:05:38Z")

</div>

Pietro io ho fatto cosi:

if/\bas\b/ =~ primariga.join(" ") perche se facevo senza il join non  
funziona  
l’if.In questo modo ho diviso la frase quando c’Ã¨ uno stapio vuoto  
giusto??

Poi dentro l’if ho fatto come hai detto tu:

> riga = primariga[0]  
> ma mi viene stampato solo result=(Application questo perche mi sono  
> dimenticato di dirti che quando ho creato primariga cosi:

primariga=arr[valore].split(/\s/)  
dove arr Ã¨ un array in cui ci sono memorizzate tutte le frasi che devono  
essere tradotte,mentre valore Ã¨ una variabile che viene incrementata di  
volta in volta, in modo tale che in primariga viene memorizzata una  
frase per volta, chiaro???  
Quindi alla fine mi serve trovare l’elemento “as” che Ã¨ l’elemento  
primariga[1], infatti se faccio il puts di questo elemento mi viene  
visualizzato “as”.Essendo che as non si trovera sempre allo stesso  
elemento ho usato l’istruzione index,in modo tale che mi trova la parola  
in questione:

as=primariga.index"as"

Comunque ora se faccio puts primariga[as] funziona,perche???Io ho solo  
modificato l’if come ti ho scritto prima.  
Un’altra cosa ma in ruby esiste l’overload e override.Grazie ancora.Ciao
