2011-05-26 73 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