Você provavelmente está familiarizado com a seguinte abreviação de Ruby ( a
é uma matriz):
a.map(&:method)
Por exemplo, tente o seguinte no irb:
>> a=[:a, 'a', 1, 1.0]
=> [:a, "a", 1, 1.0]
>> a.map(&:class)
=> [Symbol, String, Fixnum, Float]
A sintaxe a.map(&:class)
é um atalho para a.map {|x| x.class}
.
Leia mais sobre esta sintaxe em " O que map (&: name) significa em Ruby? ".
Por meio da sintaxe &:class
, você está fazendo uma chamada de método class
para cada elemento do array.
Minha pergunta é: você pode fornecer argumentos para a chamada do método? E se sim, como?
Por exemplo, como você converte a seguinte sintaxe
a = [1,3,5,7,9]
a.map {|x| x + 2}
para a &:
sintaxe?
Não estou sugerindo que a &:
sintaxe seja melhor. Estou apenas interessado na mecânica de usar a &:
sintaxe com argumentos.
Presumo que você saiba que +
é um método na classe Integer. Você pode tentar o seguinte no irb:
>> a=1
=> 1
>> a+(1)
=> 2
>> a.send(:+, 1)
=> 2