2014-07-01 47 views
1

我有這樣的代碼之間的區別:+和:+

list << num if num.to_s.split("").map(&:to_i).map(&:factorial).inject(:+) == num 

它的工作原理,我想知道如何inject作品,未經&(符號)在:+的前面。我要求某人解釋:+&:+之間的區別。

+1

其中一人戴着帽子? ...對不起,忍不住 – musefan

+2

@musefan不,其中一個有頭髮。 – sawa

回答

5

&:+被翻譯成proc,而:+是一個符號。 inject支撐器接收符號,其在內部轉換爲PROC:

如果指定的塊,然後在枚舉每個元素塊是 傳遞一個累加器值(備忘錄)和元件。 如果您改爲指定 符號,則集合中的每個元素將被傳遞到 備忘錄的命名方法。無論哪種情況,結果都會成爲備忘錄的新值 。在迭代結束時,備忘錄 的最終值是該方法的返回值。