# Undefined method store for nil:NilClass (NoMethodError)

**URL:** <https://www.ruby-forum.com/t/undefined-method-store-for-nil-nilclass-nomethoderror/92145>\
**Category:** IT\
**Created:** [April 16, 2007, 4:53pm UTC](https://www.ruby-forum.com/t/undefined-method-store-for-nil-nilclass-nomethoderror/92145 "2007-04-16T16:53:57Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 16, 2007, 4:53pm UTC](https://www.ruby-forum.com/t/undefined-method-store-for-nil-nilclass-nomethoderror/92145/1 "2007-04-16T16:53:57Z")

</div>

Perche’ mi da l’errore di cui all’oggetto?

class prova

@dir = {}  
@a = []  
@dir\_spediti = {}  
@dir\_ricevuti = {}

def acquisisciAccounts  
IO.foreach(“file.txt”) do |riga|  
codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)  
@dir.store("#{mail}","#{cognome} #{nome}")  
@dir\_spediti.store("#{mail}",0)  
@dir\_ricevuti.store("#{mail}",0)  
end  
end  
end

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 17, 2007, 9:07am UTC](https://www.ruby-forum.com/t/undefined-method-store-for-nil-nilclass-nomethoderror/92145/2 "2007-04-17T09:07:35Z")

</div>

Il giorno lun, 16/04/2007 alle 16.52 +0200, Mauro S. ha scritto:

> ```
> IO.foreach("file.txt") do |riga|
> codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)
> @dir.store("#{mail}","#{cognome} #{nome}")
> @dir_spediti.store("#{mail}",0)
> @dir_ricevuti.store("#{mail}",0)
> end
> 
> ```
> 
> end  
> end

no answers?

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 17, 2007, 9:43am UTC](https://www.ruby-forum.com/t/undefined-method-store-for-nil-nilclass-nomethoderror/92145/3 "2007-04-17T09:43:38Z")

</div>

Mauro S. wrote:

> > def acquisisciAccounts  
> > IO.foreach(“file.txt”) do |riga|  
> > codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)  
> > @dir.store("#{mail}","#{cognome} #{nome}")  
> > @dir\_spediti.store("#{mail}",0)  
> > @dir\_ricevuti.store("#{mail}",0)  
> > end  
> > end  
> > end

L’errore ti avvisa che la classe nil:NilClass non ha un metodo chiamato  
store.Ora: tu dove usi questo metodo? Lo usi nelle righe:

> > ```
> > @dir.store("#{mail}","#{cognome} #{nome}")
> > @dir_spediti.store("#{mail}",0)
> > @dir_ricevuti.store("#{mail}",0)
> > 
> > ```

Quindi vuol dire che o @dir e/o @dir\_spediti e/o @dir\_ricevuti sono nil  
e siccome nil non ha il metodo store, ecco perche’ ti da l’errore.

Il motivo per cui queste variabili sono nil e non inizializzate nasce,  
probabilmente, dal fatto che le hai inizializzate nel modo sbagliato,  
le istance variable le dovresti inizializzare dentro il metodo  
initialize:

class prova

def initialize  
@dir = {}  
@a = []  
@dir\_spediti = {}  
@dir\_ricevuti = {}  
end

def acquisisciAccounts  
IO.foreach(“file.txt”) do |riga|  
codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)  
@dir.store("#{mail}","#{cognome} #{nome}")  
@dir\_spediti.store("#{mail}",0)  
@dir\_ricevuti.store("#{mail}",0)  
end  
end  
end

ciao!  
Gendag

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 17, 2007, 9:43am UTC](https://www.ruby-forum.com/t/undefined-method-store-for-nil-nilclass-nomethoderror/92145/4 "2007-04-17T09:43:38Z")

</div>

Mauro S. wrote:

> Il giorno lun, 16/04/2007 alle 16.52 +0200, Mauro S. ha scritto:
> 
> > Perche’ mi da l’errore di cui all’oggetto?
> > 
> > class prova
> > 
> > @dir = {}  
> > @a = []  
> > @dir\_spediti = {}  
> > @dir\_ricevuti = {}  
> > def acquisisciAccounts  
> > IO.foreach(“file.txt”) do |riga|  
> > codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)  
> > @dir.store("#{mail}","#{cognome} #{nome}")  
> > @dir\_spediti.store("#{mail}",0)  
> > @dir\_ricevuti.store("#{mail}",0)  
> > end  
> > end  
> > end

L’errore ti avvisa che la classe nil:NilClass non ha un metodo chiamato  
store.Ora: tu dove usi questo metodo? Lo usi nelle righe:

> > ```
> > @dir.store("#{mail}","#{cognome} #{nome}")
> > @dir_spediti.store("#{mail}",0)
> > @dir_ricevuti.store("#{mail}",0)
> > 
> > ```

Quindi vuol dire che o @dir e/o @dir\_spediti e/o @dir\_ricevuti sono nil  
e siccome nil non ha il metodo store, ecco perche’ ti da l’errore.

Il motivo per cui queste variabili sono nil e non inizializzate nasce,  
probabilmente, dal fatto che le hai inizializzate nel modo sbagliato,  
le istance variable le dovresti inizializzare dentro il metodo  
initialize:

class prova

def initialize  
@dir = {}  
@a = []  
@dir\_spediti = {}  
@dir\_ricevuti = {}  
end

def acquisisciAccounts  
IO.foreach(“file.txt”) do |riga|  
codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)  
@dir.store("#{mail}","#{cognome} #{nome}")  
@dir\_spediti.store("#{mail}",0)  
@dir\_ricevuti.store("#{mail}",0)  
end  
end  
end

ciao!  
Gendag

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 17, 2007, 12:22pm UTC](https://www.ruby-forum.com/t/undefined-method-store-for-nil-nilclass-nomethoderror/92145/5 "2007-04-17T12:22:51Z")

</div>

On 4/17/07, david [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 

Confermo la necessità di usare initialize per poter avere qualcosa di  
funzionante. Nel codice sotto riportato trovi anche due righe che  
istanziano  
un oggetto e richiamano il metodo e tutto è ok.

Nel caso in cui non ti piaccia l’idea di inizializzare, alla tua  
versione  
iniziale potresti modificare le variabili di istanza (che iniziano con  
@) in  
variabili di classe (che iniziano con @@). In questo modo non devi prima  
istanziare un oggetto (e quindi fare l’inizializzazione). Credo comunque  
che  
questo non sia un modo elegante di risolvere il problema.

* * *

class Prova

def initialize()  
@dir = {}  
@a = []  
@dir\_spediti = {}  
@dir\_ricevuti = {}  
end

def acquisisciAccounts  
IO.foreach(“file.txt”) do |riga|  
codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)  
@dir.store(“#{mail}”, “#{cognome} #{nome}”)  
print @dir[“#{mail}”]  
# rest of code  
end  
end

end

## test = Prova.new test.acquisisciAccounts

–  
Andrea R.

: : i’m a miner : : | [therubymine.com](http://therubymine.com) | now in Amsterdam

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 17, 2007, 10:09am UTC](https://www.ruby-forum.com/t/undefined-method-store-for-nil-nilclass-nomethoderror/92145/6 "2007-04-17T10:09:40Z")

</div>

> Il motivo per cui queste variabili sono nil e non inizializzate nasce,  
> probabilmente, dal fatto che le hai inizializzate nel modo sbagliato,  
> le istance variable le dovresti inizializzare dentro il metodo  
> initialize:

Hum hum… ma sei sicuro che sta lì il problema? Ho scritto codice come  
il suo, senza initialize e m’è parso funzionare. Boh.

–  
“Blasphemy is an artistic effect, because blasphemy depends upon a  
philosophical conviction. Blasphemy depends upon belief and is fading  
with it. If any one doubts this, let him sit down seriously and try to  
think blasphemous thoughts about Thor. I think his family will find him  
at the end of the day in a state of some exhaustion.” — G. K.  
Chesterton, Heretics
