Este é o estilo típico de sobrescrita de um programador Ruby no mesmo objeto:
array = [1.2 , 2.7]
array.map!(&:floor)
Isso modificará minha mesma matriz de objeto .
puts array
#=> [1,2]
Da mesma forma, o código a seguir remove valores nulos de uma matriz:
array = [1 , 2, nil, 3, nil, 5]
new_array = array.compact
puts new_array
#=> [1,2,3,5]
Mas se tentarmos usar o operador bang para compact, acabaremos com nil para nenhum caso de valor nulo em uma matriz.
array = [1 , 2, 3] # No nil values present
array.compact!
puts array
#=> nil
Isso pode facilmente escapar de nossos olhos durante a depuração do código.
http://ruby-doc.org/core-1.9.3/Array.html#method-i-collect-21