•  
  • 0
  •  
0

Что означают следующие конструкции в руби: ":+" или "&+"

Я уже несколько раз встречал подобные записи:

sum=[1,2,3].inject(:+) 

вместо

sum=[1,2,3].inject(0){|sum, current| sum+=current}

Что обозначает ":+" или "&+" и как правильно их использовать?

ruby.
спросил 654 дня назад Аватор пользователя Valentin Valentin
229 6
300

1 ответ:

    •  
    • 2
    •  

    (:+) в качестве блока внутрь метода inject передается символ(Symbol) "+", который внутри, при вызове трактуется как имя метода. &+ трактуется как Proc.new(:+) т.е. оборачивание имени метода в блок происходит явно, в отличии от предыдущего случая, где оборачивание происходило неявно.

    Такие вызовы удобно использовать, если нужно что-то сделать по какому-то определенному пролю объекта, например.

    User.all.group_by(&:last_visit_day_ago) , где last_visit_day_ago - метод объекта User.

    Вики-ответ
    изменил 654 дня назад Аватор пользователя potapuff potapuff
    45 1
Чтобы написать ответ, вы должны авторизироваться.