Вероятно, вы знакомы со следующим сокращением 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