Quando você diz names.map (& xxx), está dizendo ao Ruby para passar o objeto Proc em xxx para mapear como um bloco.
Se xxx ainda não for um objeto Proc, Ruby tenta forçá-lo a se tornar um, enviando-lhe uma mensagem to_proc.
–Dave Thomas
def to_proc
proc { |obj, *args| obj.send(self, *args) }
end
Portanto, [foo1, foo2 …]. Map (&: to i) pode ser visto como:
“ `
[foo1, foo2 …]. Map {| bar | bar.to i}
“ `