Что означает `&` в следующем синтаксисе ruby? - PullRequest
4 голосов
/ 10 мая 2011

В следующем примере ruby, что означает &? Это по линии += в цикле?

payments.sum(&:price)

Спасибо

Rich

Ответы [ 4 ]

3 голосов
/ 10 мая 2011

&: цена - это сокращение от «использовать метод #price для каждого члена коллекции».

Унарный «&», когда передается в качестве аргумента в метод, он говорит Ruby «взять это и включить егов проц ".Метод #to_proc для символа # отправит этот символ принимающему объекту, который вызывает соответствующий метод с этим именем.

1 голос
/ 10 мая 2011

"Если последнему аргументу метода предшествует амперсанд, Ruby предполагает, что это объект Proc. Он удаляет его из списка параметров, преобразует объект Proc в блок и связывает его с методом."

От Ruby для программирования: Прагматическое руководство для программистов

Подробнее об этом в этой статье .

1 голос
/ 10 мая 2011

Нет, это не имеет ничего общего с +=. Унарный оператор & при использовании в вызове метода превращает данный объект Proc в блок. Если операнд не является Proc (как в этом случае, когда он является символом), сначала вызывается to_proc, а затем полученный объект Proc превращается в блок.

0 голосов
/ 10 мая 2011

Я вряд ли эксперт по Ruby, но, насколько я помню, это означает почти то же самое, что и в C / C ++, где это оператор адреса.Другими словами, сам метод price передается в качестве аргумента sum вместо вызова price, а результат передается в sum

...