# Che differenza c'è tra

**URL:** <https://www.ruby-forum.com/t/che-differenza-ce-tra/213237>\
**Category:** IT\
**Created:** [October 27, 2011, 1:09pm UTC](https://www.ruby-forum.com/t/che-differenza-ce-tra/213237 "2011-10-27T13:09:54Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [October 27, 2011, 1:09pm UTC](https://www.ruby-forum.com/t/che-differenza-ce-tra/213237/1 "2011-10-27T13:09:54Z")

</div>

Ciaoa a tutti,

---

<div class="post-metadata">

**Author:** ![Gianluca\_P](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/f17d59/32.png) [@Gianluca\_P](https://www.ruby-forum.com/u/Gianluca_P)\
**Post date:** [October 27, 2011, 1:12pm UTC](https://www.ruby-forum.com/t/che-differenza-ce-tra/213237/2 "2011-10-27T13:12:59Z")

</div>

Scusate il doppio invio, mi scappata …

Stavo leggendo un articolo ho visto fare questa cosa:

class \<\< nil  
def f1  
puts “f1”  
end  
end

io l’avrei scritto cos:

class NilClass  
def f1  
puts “f1”  
end  
end

Sono equivalenti? Qualcuno mi potrebbe spiegare cosa accade nella riga:

class \<\< nil

Grazie 1000  
Gianluca

Il 27 ottobre 2011 13:09, Gianluca P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha  
scritto:

---

<div class="post-metadata">

**Author:** ![Gianluca\_P](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/f17d59/32.png) [@Gianluca\_P](https://www.ruby-forum.com/u/Gianluca_P)\
**Post date:** [October 27, 2011, 4:48pm UTC](https://www.ruby-forum.com/t/che-differenza-ce-tra/213237/3 "2011-10-27T16:48:34Z")

</div>

Quella sintassi serve per definire i metodi come self.  
Lascia perdere la classe nil che è particolare, guarda questo esempio:

class Pippo; end  
=\> nil

class \<\< Pippo  
def f1  
puts ‘f1’  
end  
end  
=\> nil

Pippo.f1  
f1  
=\> nil

p=Pippo.new  
=\> #Pippo:0xe3b350

> p.f1  
> NoMethodError: undefined method `f1’ for #Pippo:0xe3b350

class \<\< p  
def f2  
puts ‘f2’  
end  
end  
=\> nil

p.f2  
f2  
=\> nil

---

<div class="post-metadata">

**Author:** ![Gianluca\_P](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/f17d59/32.png) [@Gianluca\_P](https://www.ruby-forum.com/u/Gianluca_P)\
**Post date:** [October 28, 2011, 10:31am UTC](https://www.ruby-forum.com/t/che-differenza-ce-tra/213237/4 "2011-10-28T10:31:29Z")

</div>

Il 27 ottobre 2011 16:48, Marco M.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> Quella sintassi serve per definire i metodi come self.  
> Lascia perdere la classe nil che particolare, guarda questo esempio:  
> Esatto, lasciamo perdere nil che “speciale” (ma non pi di tanto …).

Ieri sera ho letto sul pickaxe il discorso delle eigenclass e ho  
capito come funziona la cosa, in realt semplice, dopo che l’hai  
capita 🙂

class \<\< Pippo  
def f1  
puts ‘f1’  
end  
end

qu stai attaccando il metodo al singleton della class mentre se fai

p = Pippo.new

class \<\< p  
ecc ..

allora stai attaccando il metodo al singleton dell’istanza e quindi il  
metodo l’hai attaccato solo all’istanza di p, se fai poi

p1 = Pippo.new

non ti ritrovi il metodo che hai aggiunto all’istanza p.

Bello, Ruby veramente na figata 🙂

Grazie a tutti e saluti  
Gianluca
