2013-03-16 50 views
3

Doc of define_singleton_method`Object#define_singleton_method(symbol,method)`如何在ruby中工作?

我有兩個語法來定義,如下singleton方法:

define_singleton_method(符號){塊} - > PROC

隨着上述語法我嘗試了下面的代碼和我理解的語法:

define_singleton_method :foo do |params = {}| 
params 
end 
#=> #<Proc:[email protected](irb):1 (lambda)> 

foo 
#=> {} 

foo(bar: :baz) 
#=> {:bar=>:baz} 

foo(bar: :baz ,rar: :gaz) 
#=> {:bar=>:baz, :rar=>:gaz} 

但需要有人的幫助,找出每個與下面的語法的一個例子。

define_singleton_method(符號,方法) - > NEW_METHOD

按照該文檔 - 的方法,參數可以是Proc,一個MethodUnboundMethod對象。我沒有在那裏得到任何例子。

任何人都可以幫助我在這裏得到一個反例斜體單詞?

回答

7

Proc目的是通過使用lambdaproc->Proc.new或在參數列表中的&語法創建的。可以通過使用method方法獲得對象Method,並且可以通過使用instance_method方法獲得UnboundMethod。因此,這裏有每一種的例子:隨着Proc

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 
+0

感謝你也是:D – 2013-03-16 12:36:27

3

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" 
+0

不錯的一個!感謝給我的例子。 :) – 2013-03-16 12:36:09

+0

是':foo'的singleton_method的身體'oof.method(:reverse)'? – 2013-03-16 12:50:52

相關問題