Operador malicioso em rubi

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