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