- 0
✩
0
Что означают следующие конструкции в руби: ":+" или "&+"
Я уже несколько раз встречал подобные записи:
sum=[1,2,3].inject(:+)
вместо
sum=[1,2,3].inject(0){|sum, current| sum+=current}
Что обозначает ":+" или "&+" и как правильно их использовать?
300
1 ответ:
-
- 2
Вики-ответ(:+) в качестве блока внутрь метода inject передается символ(Symbol) "+", который внутри, при вызове трактуется как имя метода. &+ трактуется как Proc.new(:+) т.е. оборачивание имени метода в блок происходит явно, в отличии от предыдущего случая, где оборачивание происходило неявно.
Такие вызовы удобно использовать, если нужно что-то сделать по какому-то определенному пролю объекта, например.
User.all.group_by(&:last_visit_day_ago) , где last_visit_day_ago - метод объекта User.
Чтобы написать ответ, вы должны авторизироваться.