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