Che differenza c'è tra

Ciaoa a tutti,

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. [email protected] ha
scritto:

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

Il 27 ottobre 2011 16:48, Marco M.
[email protected] 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 :slight_smile:

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 :slight_smile:

Grazie a tutti e saluti
Gianluca