2011-05-26 52 views
5

如何在变量中获取实例方法?例如:如何获取绑定到Ruby变量的实例方法?

class Foo 
    def bar 
    puts "bar" 
    end 
end 

我希望能够操纵“bar”实例方法(例如,传递它)。我该怎么做?

我知道,我可以得到类

foo_class = Kernel.const_get("Foo") 

不断有什么相似的,我可以做的就是Foo#bar

+0

类方法'self.bar'? – fl00r 2011-05-26 21:03:59

+0

您是否想要动态更改小节方法的工作方式,或者您只是想调用小节方法以便输出“小节”? – 2011-05-26 21:07:32

+0

@ fl00r:这是行不通的。我没有这个班的一个实例。 @Scott Gottreu:我想能够称呼它。 – 2011-05-26 21:08:05

回答

7

看来你需要一个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,但是最终的''hello''不应该是''bar“'? – 2011-05-26 22:39:46

+0

是啊,固定.... – tokland 2011-05-26 22:46:13

+0

地狱对耶 – 2017-11-29 10:24:18

0

method(:bar)。你可以打电话给那个,它仍然绑定到self