Вы, вероятно, знакомы со следующей сокращенной записью Ruby ( aэто массив):
a.map(&:method)
Например, попробуйте в irb следующее:
>> a=[:a, 'a', 1, 1.0]
=> [:a, "a", 1, 1.0]
>> a.map(&:class)
=> [Symbol, String, Fixnum, Float]
Синтаксис a.map(&:class)является сокращением для a.map {|x| x.class}.
Подробнее об этом синтаксисе читайте в разделе « Что означает map (&: name) в Ruby? ».
С помощью синтаксиса &:classвы вызываете метод classдля каждого элемента массива.
Мой вопрос: можете ли вы предоставить аргументы для вызова метода? И если да, то как?
Например, как преобразовать следующий синтаксис
a = [1,3,5,7,9]
a.map {|x| x + 2}
к &:синтаксису?
Я не утверждаю, что &:синтаксис лучше. Меня просто интересует механизм использования &:синтаксиса с аргументами.
Я предполагаю, что вы знаете, что +это метод класса Integer. В irb можно попробовать следующее:
>> a=1
=> 1
>> a+(1)
=> 2
>> a.send(:+, 1)
=> 2