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