Fwd: Iniettare metodi statici


#1

Ma io vorrei che fosse possibile chiamare ‘metodo_per_a_e_c’ senza fare il
new degli oggetti, tipo:

AAA.a.metodo_per_a_e_c e BBB.metodo_per_a_e_c

Avete idea di come fare? Ho spulciato il pickaxe ma non sono riuscito a
trovare la risposta al mio dubbio…

tmp> cat static.rb
module CCC
def metodo_per_a_e_c
p ‘chiamato metodo_per_a_e_c!’
end
end

class AAA
extend CCC
end

class BBB
class << self
include CCC
end
end

AAA.metodo_per_a_e_c
BBB.metodo_per_a_e_c

tmp> ruby static.rb
“chiamato metodo_per_a_e_c!”
“chiamato metodo_per_a_e_c!”

Buona giornata. :slight_smile:
Massimiliano


blog: http://blog.hyperstruct.net
sw: http://dev.hyperstruct.net, http://repo.hyperstruct.net


#2

Visto che siete preparati, vi rompo ancora… :slight_smile:
Ci sono differenze tra i due approcci?

class AAA
extend CCC
end

class AAA
class << self
include CCC
end
end


#3

— Paolo Donà removed_email_address@domain.invalid ha scritto:

end
end

In breve: sono identici.

In lungo: non lo sapevo neanche io, ma siccome mi era
venuto il dubbio ho fatto una piccola indagine: se
guardi dentro eval.c dovresti trovare la definizione
di #extend , che in pratica richiama
Object#extend_object e Module#extended per ognuno
degli argomenti passati.

#extend_object a sua volta non fa altro che
rb_include_module(rb_singleton_class(obj), module)

Sempre se non ho capito male, cosa che è
plausibilissima :slight_smile:


icq: #69488917
blog: http://riffraff.blogsome.com


Yahoo! Messenger with Voice: chiama da PC a telefono a tariffe esclusive
http://it.messenger.yahoo.com