2011-05-26 10 views
5

¿Cómo puedo obtener un método de instancia en una variable? Por ejemplo:¿Cómo obtengo un método de instancia vinculado a una variable en ruby?

class Foo 
    def bar 
    puts "bar" 
    end 
end 

Quiero ser capaz de manipular el método de instancia "barra" (por ejemplo, para pasarlo alrededor). ¿Cómo puedo hacerlo?

sé que puedo conseguir el constante con

foo_class = Kernel.const_get("Foo") 

clase ¿Hay algo similar que pueda hacer para conseguir Foo#bar?

+0

método de clase 'self.bar'? – fl00r

+0

¿Desea cambiar dinámicamente cómo funciona el método de barra o simplemente quiere llamar al método de barra para que emita 'bar'? –

+0

@ fl00r: Eso no funciona. No tengo una instancia de la clase. @Scott Gottreu: Quiero poder llamarlo. –

Respuesta

7

Parece que necesita una UnboundMethod:

class Foo 
    def initialize(value) 
    @value = value 
    end 

    def bar 
    @value 
    end 
end 

unbound_bar = Foo.instance_method(:bar) 
p unbound_bar.bind(Foo.new("hello")).call 
#=> "hello" 
+1

+1, pero ¿no debería el final '" hola "' ser una '" barra "'? –

+0

sí, arreglado ... – tokland

+0

Infierno para el sí –

0

method(:bar) en el ámbito de método. Puede llamar a ese, todavía está obligado a self.

Cuestiones relacionadas