Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

引数のあたまに&をつけるとto_procメソッドが呼び出される(その1)

最後の引数の直前に & がついている場合、
クラスのto_procメソッドで手続き オブジェクト(Proc)にコンバートされ渡されます。

というわけで

(0..10).map &:next
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

なんて事ができるわけです。

見方を変えれば、直前で無理矢理Procオブジェクトに変換してしまえばいいわけです
to_procで無理矢理コンバートしたり

(0..10).map &2.method(:*).to_proc
#=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Object#methodを使って、むき出しのMethodオブジェクトとして渡してあげる事だってできます
Methodの場合はself を call する Proc オブジェクトを生成します

hoge = 2.method(:*)
(0..10).map &hoge
#=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

(0..10).map &2.method(:*)
#=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Symbolの場合はself に対応する Proc オブジェクトを返します。

(1..3).inject(&:+) #=> 6

参考もと

メソッド呼び出し(super・ブロック付き・yield)

修正記録

10/5 MethodとProcだけだと勘違いしていた件を全面的に修正。ついでにタイトル変更