[foo1, foo2 …]. map (&: to_i) .map (&: pred)

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}
“ `