作者: rubikitch
日時: 2009/5/16(20:17)
From: kikwai@... (機械伯爵)
Subject: [TSruby:325] Re: inject メソッド
Date: Sat, 16 May 2009 19:03:24 +0900 (JST)

>  .inject(:*)が、.inject(&:*)になってるのは、なぜでしょーねぇ?

injectにシンボルを渡すと &シンボル と同じ効果になる。
で、 &シンボルは Symbol#to_proc により
{|x,y| x.__send__(sym, y) } (簡略化あり: xのsymメソッドを引数yをつけて呼ぶ)となる。

.inject(&:*) === .inject{|x,y| x*y}

x*y は「*」というメソッド呼び出しなので 「x.__send__(:*, y)」と等価である。

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/