2009-02-09 6 views
16

Ich versuche, die Methode Klasse entlang der Linien zu verlängern:Wie bekomme ich das Method-Objekt für eine Methode?

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 

Wie erwartet, als ich f.a.aa, die .aa wird ausgeführt auf dem Rückgabewert von f.a. Wie bekomme ich Zugriff auf das Method-Objekt, das f.a darstellt?

Antwort

31

Mit der method Methode ... =)

f.method(:a).aa 
+0

Ich hatte keine Ahnung, dass die Methode Methode bestand. Praktisch. Vielen Dank. –

+4

@squeegy: Sie müssen nur methodisch in Ihrer Forschung sein. :) –

Verwandte Themen