Im lecture Métaprogrammation en Ruby.Ruby define_method question
Voici deux extraits de code du livre:
my_var = "Success"
MyClass = Class.new do
puts "#{my_var} in the class definition!"
define_method :my_method do
puts "#{my_var} in the method!"
end
end
MyClass.new.my_method
⇒ Success in the class definition!
Success in the method!
et:
def define_methods
shared = 0
Kernel.send :define_method, :counter do
shared
end
Kernel.send :define_method, :inc do |x|
shared += x
end
end
define_methods
counter # => 0
inc(4)
counter # => 4
Je me demande pourquoi on n'a pas à utiliser l'envoi dynamique (utilisation de Kernel.send) lors de la définition de la méthode dans le premier exemple alors que l'on doit l'utiliser dans le deuxième exemple. Je lui ai donné quelques idées mais je ne peux pas le comprendre.
Merci!
"Les méthodes privées peuvent uniquement être appelées sans récepteur." - donc ... omettez simplement le récepteur, alors ça va être un récepteur implicite, et ça marche bien. vois ma réponse. ai-je mal compris quelque chose? –
@KarolyHorvath: le récepteur implicite est 'self', mais l'auteur veut que le récepteur soit' Kernel'. –