Comment définir la méthode d'instance en ruby dynamiquement?
Je veux créer dynamiquement méthode d'instance de la classe enfant par le biais de la méthode de classe de la classe parent.
class Foo
def self.add_fizz_method &body
# ??? (This is line 3)
end
end
class Bar < Foo
end
Bar.new.fizz #=> nil
class Bar
add_fizz_method do
p "i like turtles"
end
end
Bar.new.fizz #=> "i like turtles"
Quoi écrire sur la ligne #3?
OriginalL'auteur Arnis Lapsa | 2012-07-03
Vous devez vous connecter pour publier un commentaire.
utilisation
define_method
comme ceci:de sortie:
essayez
p self.class
ci-dessousp 'i like turtles'
.self
est déjà une instance deBar
.Btw: si vous souhaitez revenir
nil
au lieu de lancer unNoMethodError
avant d'avoir appeléadd_fizz_method
, vous pouvez déclarer un videfizz
méthode dans leFoo
classe.heh... j'ai écrit
define_method 'fizz', do &block.call end
précédemment. tyvm. obtenu ce dont j'avais besoin et appris une chose.OriginalL'auteur Patrick Oscity
...ou d'accepter un bloc
OriginalL'auteur lebreeze