以下の内容はhttps://shuzo-kino.hateblo.jp/entry/2014/10/03/221804より取得しました。


引数のあたまに&をつけると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だけだと勘違いしていた件を全面的に修正。ついでにタイトル変更




以上の内容はhttps://shuzo-kino.hateblo.jp/entry/2014/10/03/221804より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14