最後の引数の直前に & がついている場合、
クラスの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