2009-02-09 6 views
16

Je suis en train d'étendre la classe de la méthode le long des lignes de:Comment obtenir l'objet Method pour une méthode?

irb(main):008:0> class A 
irb(main):009:1> def a 
irb(main):010:2> puts "blah" 
irb(main):011:2> end 
irb(main):012:1> end 
=> nil 
irb(main):013:0> class Method 
irb(main):014:1> def aa 
irb(main):015:2> p "hi" 
irb(main):016:2> end 
irb(main):017:1> end 
=> nil 
irb(main):018:0> f = A.new 
=> #<A:0x54ed4> 
irb(main):019:0> A.a 
NoMethodError: undefined method `a' for A:Class 
    from (irb):19 
    from :0 
irb(main):020:0> f.a 
blah 
=> nil 
irb(main):027:0> f.a.aa 
blah 
NoMethodError: undefined method `aa' for nil:NilClass 
    from (irb):27 
    from :0 

Comme prévu, quand je f.a.aa, le .aa est en cours d'exécution sur la valeur de retour de f.a. Comment accéder à l'objet Method qui représente f.a?

Répondre

31

Avec la méthode method ... =)

f.method(:a).aa 
+0

Je ne savais pas que la méthode de la méthode existait. Pratique. Merci. –

+4

@squeegy: Il vous suffit d'être méthodologique dans votre recherche. :) –

Questions connexes