obj.method(:method_name) [Object/method] ˤꥪ֥Ȳ
᥽åɥ֥ȤΥ饹Ǥ᥽åɤμΡ̾Ǥʤˤȥ쥷
ФȤޤProc ֥ȤȰäƥƥȤݻ
ޤ

Proc ȤκMethod ϼФоݤǤ᥽åɤ
ʤкޤ󤬡Proc Ͻʤ˺ޤ
Proc ϻȤΤƤ˸Method ϲ٤֤ⷫ
˸ȸޤޤ񤹤륳ɤ礭ȤǤ
Proc ϾϡMethod 絬ϥɤ˸ȸޤ


:

* ¸Υ᥽åɤ Method ֥Ȳ
  (Object#method [Object/method] 򻲾)

        class Foo
          def foo(arg)
            "foo called with arg #{arg}"
          end
        end

        m = Foo.new.method(:foo)

        p m             # => #<Method: Foo#foo>
        p m.call(1)     # => "foo called with arg 1"

* ̾Τʤ᥽å()ɬפʤ Proc Ȥɤ

        pr = Proc.new {|arg|
          "proc called with arg #{arg}"
        }

        p pr            # => #<Proc:0x401b1fcc>
        p pr.call(1)    # => "proc called with arg 1"

* Method ֥ȤͭѤʤΤϰʲΤ褦ʾ

        class Foo
          def foo() "foo" end
          def bar() "bar" end
          def baz() "baz" end
        end

        obj = Foo.new

        # ǤդΥȥ᥽åɤδطϥåݻƤ
        methods = {1 => obj.method(:foo),
                   2 => obj.method(:bar),
                   3 => obj.method(:baz)}

        # ȤäƴϢ᥽åɤƤӽФ
        p methods[1].call       # => "foo"
        p methods[2].call       # => "bar"
        p methods[3].call       # => "baz"

* 쥷Фꤵ(Method ֥Ȥϥ쥷Фݻ)ɬ
  פʤʤ Object#send [Object/send]Ȥˡͭѡ

        class Foo
          def foo() "foo" end
          def bar() "bar" end
          def baz() "baz" end
        end

        # ǤդΥȥ᥽å(̾)δطϥåݻƤ
        # 쥷Фξ󤬤ˤϤʤȤ
        methods = {1 => :foo,
                   2 => :bar,
                   3 => :baz}

        # ȤäƴϢ᥽åɤƤӽФ
        # 쥷ФǤ(Foo 饹Υ󥹥󥹤Ǥɬפʤ)
        p Foo.new.send(methods[1])      # => "foo"
        p Foo.new.send(methods[2])      # => "bar"
        p Foo.new.send(methods[3])      # => "baz"