Saltar sobre iteración en Enumerable # collect

(1..4).collect do |x|
  next if x == 3
  x + 1
end # => [2, 3, nil, 5]
    # desired => [2, 3, 5]

Si la condición paranext se cumple,collect ponenil en la matriz, mientras que lo que intento hacer es ponern elemento en la matriz devuelta si se cumple la condición. ¿Es esto posible sin llamar adelete_if { |x| x == nil } en la matriz devuelta?

(Usando Ruby 1.8.7; mi extracto de código está muy abstraído)

Respuestas a la pregunta(5)

Su respuesta a la pregunta