【问题标题】:How do I get an instance method bound to a variable in ruby?如何在 ruby​​ 中获取绑定到变量的实例方法?
【发布时间】:2011-05-26 21:01:20
【问题描述】:

如何在变量中获取实例方法?例如:

class Foo
  def bar
    puts "bar"
  end
end

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

我知道我可以得到类常量

foo_class = Kernel.const_get("Foo")

有什么类似的方法可以得到Foo#bar吗?

【问题讨论】:

  • 类方法self.bar?
  • 您是想动态更改 bar 方法的工作方式,还是只是想调用 bar 方法以输出“bar”?
  • @fl00r:这行不通。我没有该类的实例。 @Scott Gottreu:我希望能够调用它。
  • 你想在哪里传递实例方法?通常它绑定到对象上下文,没有它就不能调用。在对象中,您始终可以创建包装器lambda{ bar }

标签: ruby methods


【解决方案1】:

看来你需要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"

【讨论】:

  • 见鬼去吧
【解决方案2】:

method(:bar) 在方法范围内。你可以调用那个,它仍然绑定到self

【讨论】:

    【解决方案3】:

    请参阅UnboundMethod 的 Ruby 文档。

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 2011-08-27
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 2011-02-01
      • 2013-05-28
      • 2012-03-07
      相关资源
      最近更新 更多