4

からDoc of define_singleton_method

singleton以下のようにメソッドを定義するための 2 つの構文があります。

define_singleton_method(symbol) { ブロック } -> 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(シンボル、メソッド) -> new_method

ドキュメントに従って - method パラメーターは、、、またはオブジェクトProcにすることができます。そこには例がありませんでした。MethodUnboundMethod

イタリック体の単語に反対する例を1つ得るために、ここで私を助けてくれる人はいますか?

4

2 に答える 2

10

Procオブジェクトは、 、 、 、またはパラメーター リストの構文を使用しlambdaproc作成->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
于 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 に答える