2009-02-09 19 views
16

estoy tratando de extender la clase Método lo largo de las líneas de:¿Cómo obtengo el objeto Método para un método?

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 

Como era de esperar, cuando f.a.aa, se está ejecutando la .aa en el valor de retorno de f.a. ¿Cómo obtengo acceso al objeto Método que representa f.a?

Respuesta

31

Con el método method ... =)

f.method(:a).aa 
+0

no tenía ni idea de que existía el método de método. Práctico. Gracias. –

+4

@squeegy: solo tiene que ser metodológico en su investigación. :) –

Cuestiones relacionadas