如何在变量中获取实例方法?例如:如何获取绑定到Ruby变量的实例方法?
class Foo
def bar
puts "bar"
end
end
我希望能够操纵“bar”实例方法(例如,传递它)。我该怎么做?
我知道,我可以得到类
foo_class = Kernel.const_get("Foo")
不断有什么相似的,我可以做的就是Foo#bar
?
如何在变量中获取实例方法?例如:如何获取绑定到Ruby变量的实例方法?
class Foo
def bar
puts "bar"
end
end
我希望能够操纵“bar”实例方法(例如,传递它)。我该怎么做?
我知道,我可以得到类
foo_class = Kernel.const_get("Foo")
不断有什么相似的,我可以做的就是Foo#bar
?
看来你需要一个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,但是最终的''hello''不应该是''bar“'? – 2011-05-26 22:39:46
是啊,固定.... – tokland 2011-05-26 22:46:13
地狱对耶 – 2017-11-29 10:24:18
method(:bar)
。你可以打电话给那个,它仍然绑定到self
。
请参阅Ruby文档UnboundMethod。
类方法'self.bar'? – fl00r 2011-05-26 21:03:59
您是否想要动态更改小节方法的工作方式,或者您只是想调用小节方法以便输出“小节”? – 2011-05-26 21:07:32
@ fl00r:这是行不通的。我没有这个班的一个实例。 @Scott Gottreu:我想能够称呼它。 – 2011-05-26 21:08:05