Как «(1..4) .inject (&: +)» работает в Ruby

Я нахожу этот код в Ruby довольно интригующим

(1..4).inject(&:+)

Хорошо, я знаю, что делает inject , и я знаю, что этот код в основном эквивалентен

(1..4).inject(0) {|a,n| a + n}

, но как именно это работает?

Почему &: + совпадает с записью блока {| a, n | a + n} ?

Почему не требуется начальное значение? Я' m в порядке с начальным значением 0, но (1..4) .inject (&: *) также работает, и там начальное значение должно быть 1 ...

13
задан Andrew Grimm 11 April 2011 в 12:37
поделиться