来自Doc of define_singleton_method
我有两种语法来定义singleton
方法,如下所示:
define_singleton_method(symbol){block} - > proc :
使用上面的语法,我尝试了下面的代码和我理解的语法:
define_singleton_method :foo do |params = {}|
params
end
#=> #<Proc:0x20e6b48@(irb):1 (lambda)>
foo
#=> {}
foo(bar: :baz)
#=> {:bar=>:baz}
foo(bar: :baz ,rar: :gaz )
#=> {:bar=>:baz, :rar=>:gaz}
但需要有人的帮助,用以下语法找出每个例子。
define_singleton_method(symbol,method) - &gt; NEW_METHOD
根据文档 - 方法参数可以是 Proc
, Method
或 UnboundMethod
对象。我没有在那里得到任何例子。
有人可以帮我在这里举一个反对 斜体 字样的例子吗?
答案 0 :(得分:9)
在参数列表中使用Proc
,lambda
,proc
,->
或Proc.new
语法创建&
对象。可以使用Method
方法获取method
对象,并且可以使用UnboundMethod
方法获取instance_method
。以下是每个例子:
p = Proc.new {|x| puts x}
m = method(:puts)
um = Object.instance_method(:puts)
define_singleton_method(:my_puts1, p)
define_singleton_method(:my_puts2, m)
define_singleton_method(:my_puts3, um)
my_puts1 42
my_puts2 42
my_puts3 42
答案 1 :(得分:4)
使用Proc
:
define_singleton_method(:foo, proc{ 'foo' })
foo #=> 'foo'
使用Method
:
oof = 'oof'
oof.define_singleton_method(:foo, oof.method(:reverse))
oof.foo #=> "foo"
使用UnboundMethod
:
oof = 'oof'
oof.define_singleton_method(:foo, String.instance_method(:reverse))
oof.foo #=> "foo"