4

来自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}

但是需要有人帮助找出每个具有以下语法的示例。

定义单例方法(符号,方法)-> 新方法

根据文档 - 方法参数可以是 a Proc、 aMethodUnboundMethod对象。我在那里没有任何例子。

任何人都可以在这里帮我找到一个反对斜体字的例子吗?

4

2 回答 2

10

使用、、或参数列表中的语法创建Proc对象。使用该方法可以得到一个对象,使用该方法可以得到一个对象。所以这里是每一个的例子:lambdaproc->Proc.new&MethodmethodUnboundMethodinstance_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
于 2013-03-16T12:20:10.557 回答
5

有一个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"
于 2013-03-16T12:23:53.310 回答