【发布时间】:2011-11-06 12:28:45
【问题描述】:
显然有一个名为 method 的 ruby 方法,到目前为止我找不到任何文档或示例。有人可以发布一些有用的注释示例吗?
【问题讨论】:
显然有一个名为 method 的 ruby 方法,到目前为止我找不到任何文档或示例。有人可以发布一些有用的注释示例吗?
【问题讨论】:
ruby api 文档中有关于该方法的文档
http://www.ruby-doc.org/core-1.9.3/Object.html#method-i-method
还有method_defined?如果您需要自己的方法,这也很有用
http://www.ruby-doc.org/core-1.9.3/Module.html#method-i-method_defined-3F
【讨论】:
我主要用它来查找特定方法的源位置。 (示例在 ruby-1.9.2-p290 上的 irb 中运行)
class Thing
def foo
end
end
Thing.new.method(:foo).source_location
=> ["(irb)", 2]
Thing.new.method(:foo).owner
=> Thing
【讨论】:
owner,但不能使用source_location。
Object.new.method(:method) 来查找method 方法!
它是 Object 的一部分,记录在这里:
http://www.ruby-doc.org/core-1.9.3/Object.html#method-i-method
Method 类在此处记录,并提供了一些示例:
【讨论】:
Object#method 返回的绑定方法对象的最佳用途之一是用于块。该方法的返回结果可以转换为块参数。想象一下你有:
class Converter
def convert_item(item)
item.transmorph
end
end
那么你可以这样做
c = Converter.new
elements.map(&c.method(:convert_item))
或者当你在转换器中时
elements.map(&method(:convert_item))
哪个 IMO 比显式块创建语法更优雅。它还支持to_proc,所以你可以这样做
some_object.callback = my_handler.method(:activate).to_proc
然后在some_object 你就可以了
@callback.call(data)
【讨论】:
Object#method,这是你要找的吗?
http://www.ruby-doc.org/core-1.9.3/Object.html#method-i-method
【讨论】: