
Code :
(Testé sous Windows XP ; Ruby 1.8.6)
class Canard
def initialize name
@nom = name
end
def coin
"Coin coin, I'm #{@nom} !"
end
def Canard.coin2
"Can Can !"
end
end
toto = Canard.new "Dude"
# L'accès à une méthode se fait via +method+
#prenant en argument la référence de la méthode
#(son nom sous forme de string ou de symbol).
hello = toto.method(:coin)
puts hello.call
#(bonus -> arity donne le nombre d'arguments d'une méthode)
puts "To create a new *Canard* needs " \
+ (toto.method(:initialize).arity).to_s \
+ " argument(s)."
# Une liste de références à des méthodes de +Canard+
meths = [:to_s, :to_something_else, :coin, "to_yaml"]
# L'accès se fait ensuite ici encore via +method+
#et l'appel via +call+
meths.each do |meth|
begin
puts "-----------------"
puts "Method #{meth}"
puts (toto.method(meth).call).to_s
rescue
puts "Problem with this method."
next
end
end
Note :
Les manipulations possibles sur les méthodes sont peu nombreuses, mais assez puissantes. Ici on a vu call et arity : unbind permet elle de "dissocier" la méthode référencée de son receveur (ce qui donne un objet de la classe UnboundMethod...)
Documentation :
Les manipulations possibles sur les méthodes sont peu nombreuses, mais assez puissantes. Ici on a vu call et arity : unbind permet elle de "dissocier" la méthode référencée de son receveur (ce qui donne un objet de la classe UnboundMethod...)
Documentation :
- Classe Method
- Classe UnboundMethod
0 commentaires:
Enregistrer un commentaire