# Problemi con funzioni

**URL:** <https://www.ruby-forum.com/t/problemi-con-funzioni/218271>\
**Category:** IT\
**Created:** [March 27, 2012, 12:06am UTC](https://www.ruby-forum.com/t/problemi-con-funzioni/218271 "2012-03-27T00:06:39Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [March 27, 2012, 12:06am UTC](https://www.ruby-forum.com/t/problemi-con-funzioni/218271/1 "2012-03-27T00:06:39Z")

</div>

Salve, sono uno studente universitario e da poco sto apprendendo il  
linguaggio di programmazione Ruby.  
Mi sono incappato in un problema sui parametri da assegnare ad una  
funzione.  
Il mio programma consiste sul calcolo della somma degli elementi  
all’interno di un array (vedere Immagine1)  
Per prova, ho tentato di passare alla funzione che mi calcolava la somma  
l’array, che l’ho istanziato con un ciclo times per l’inserimento degli  
elementi da tastiera nell’array. Solamente che quando eseguo il  
programma, dopo che ho inserito gli elementi nell’array, il mio  
programma non mi funziona più dato che ha riscontrato problemi sui  
parametri da passare al metodo(Immagine2).  
Stranamente ho provato anche istanziare semplicemente l’array in questo  
modo:  
A=[1,2,3] e in questo caso il programma funziona. Ma quando si tratta di  
programmi simili ai miei (con gli inserimenti da tastiera) va tutto in  
fallimento.  
Mi potete aiutare gentilmente a risolvere questo problema?!  
Vi ringrazio anticipatamente. Cordiali saluti.  
Walter Mulas

---

<div class="post-metadata">

**Author:** ![merialdo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/6bbea6/32.png) [@merialdo](https://www.ruby-forum.com/u/merialdo)\
**Post date:** [March 27, 2012, 12:19am UTC](https://www.ruby-forum.com/t/problemi-con-funzioni/218271/2 "2012-03-27T00:19:18Z")

</div>

Ciao Walter,

se il problema ti arriva solo quando i dati sono dati da tastiera andrei  
a  
controllare che l’array sia popolato correttamente. Magari bisogna  
ripulire  
meglio quanto viene scritto. Prova ad usare il metodo  
chomp[http://ruby-doc.org/core-1.9.3/String.html#method-i-chomp](http://ruby-doc.org/core-1.9.3/String.html#method-i-chomp)  
.

Per la somma poi, potresti usare il metodo  
inject[http://stackoverflow.com/questions/1538789/how-to-sum-array-members-in-ruby](http://stackoverflow.com/questions/1538789/how-to-sum-array-members-in-ruby)  
.

sum = 0  
array.inject{ |sum,x| sum + x }

Buon proseguo.

On Tue, Mar 27, 2012 at 12:06 AM, Walter Mulas  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)wrote:

> programma non mi funziona pi dato che ha riscontrato problemi sui  
> Attachments:

–  
Andrea R.  
Lelylan | reThink your house  
[http://lelylan.com](http://lelylan.com)

---

<div class="post-metadata">

**Author:** ![merialdo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/6bbea6/32.png) [@merialdo](https://www.ruby-forum.com/u/merialdo)\
**Post date:** [March 27, 2012, 12:34am UTC](https://www.ruby-forum.com/t/problemi-con-funzioni/218271/3 "2012-03-27T00:34:10Z")

</div>

Ciao Walter,  
come ti ha detto Andrea il problema che l’array sporco quando vai  
a sommare i suoi elementi. Infatti quando fai

a = Array.new(3)

viene creato un array contenente 3 valori inizializzati con il valore  
nil ([nil, nil, nil]).

Nel momento in cui vai a richiedere e pushare nell’array un nuovo  
elemento questo viene inserito in coda (es.[nil, nil, nil, 2] ).  
Una soluzione potrebbe essere quella di ripulire l’array da tutti gli  
elementi nil con il metodo chomp, un’altra inizializzare l’array vuoto  
in modo da non creare quei 3 elementi settati a nil ( a = Array.new  
invece di a = Array.new(3) ).

Ciao

Il 27 marzo 2012 00:18, Andrea R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha  
scritto:

---

<div class="post-metadata">

**Author:** ![merialdo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/6bbea6/32.png) [@merialdo](https://www.ruby-forum.com/u/merialdo)\
**Post date:** [March 27, 2012, 5:43pm UTC](https://www.ruby-forum.com/t/problemi-con-funzioni/218271/4 "2012-03-27T17:43:23Z")

</div>

grazie Gabriele, in effetti il metodo giusto compact.

A presto

Il 27 marzo 2012 17:33, gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

---

<div class="post-metadata">

**Author:** ![merialdo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/6bbea6/32.png) [@merialdo](https://www.ruby-forum.com/u/merialdo)\
**Post date:** [March 27, 2012, 7:48pm UTC](https://www.ruby-forum.com/t/problemi-con-funzioni/218271/5 "2012-03-27T19:48:23Z")

</div>

Andrea, Gabriele e Alberto vi ringrazio per l’aiuto. Ora il mio  
programma funziona alla perfezione! 😃 Alberto, comunque è meglio il  
secondo procedimento perchè si risparmiano più righe dato che l’array  
che voglio io deve essere fissato a una dimensione unica (che è 10).  
Tramite il ciclo times definisco, oltre il numero di volte di  
inserimento degli elementi dell’array, anche implicitamente la  
dimensione dell’array per il mio programma.  
Grazie mille a tutti! 🙂

---

<div class="post-metadata">

**Author:** ![merialdo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/6bbea6/32.png) [@merialdo](https://www.ruby-forum.com/u/merialdo)\
**Post date:** [March 27, 2012, 5:34pm UTC](https://www.ruby-forum.com/t/problemi-con-funzioni/218271/6 "2012-03-27T17:34:42Z")

</div>

2012/3/27 Alberto V. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> elemento questo viene inserito in coda (es.[nil, nil, nil, 2] ).  
> Una soluzione potrebbe essere quella di ripulire l’array da tutti gli  
> elementi nil con il metodo chomp, un’altra inizializzare l’array vuoto  
> in modo da non creare quei 3 elementi settati a nil ( a = Array.new  
> invece di a = Array.new(3) ).

credo alberto intendesse scrivre #compact (leva i nil da un array),  
pi che #chomp (leva gli \r\n da una stringa) 🙂

> > a=Array.new 3  
> > =\> [nil, nil, nil]  
> > a.chomp  
> > NoMethodError: undefined method `chomp' for [nil, nil, nil]:Array from (irb):2 from /Users/riffraff/.rvm/rubies/ruby-1.9.2-p180/bin/irb:16:in `’  
> > a.compact  
> > =\> []

Per visto che in ruby gli array sono dinamici, non serve a molto  
preassegnare la dimensione, quindi io eviterei.

Una nota che forse ti pu servire in futuro: se leggi il messaggio di  
errore

```
  (NilClass can't be coerced into Fixnum)

```

sostenzialmente sta dicendo:

```
hai chiamato un operazione mischiando un Fixnum (intero "piccolo")

```

e un valore nil

e da l basta che capisci cosa sia nil per risolvere 🙂

(quello che succede veramente quando fai somme, e come funziona  
#coerce in ruby puoi leggerlo qua se sei curioso)

> <https://stackoverflow.com/questions/2799571/in-ruby-how-does-coerce-actually-work>

–  
twitter: @riffraff  
blog (en, it): www.riffraff.info [riffraff.blogsome.com](http://riffraff.blogsome.com)  
work: [cascaad.com](http://cascaad.com) [circleme.com](http://circleme.com)
