%w{ one two three }.inject(Array.new) { |a, e| if e != "three" then a << 
e else a end }

The value of the block is assigned to a in the next iteration, or 
returned if it's the last
iteration, so you need to return the array itself if you're doing nothing.

David Heinemeier Hansson wrote:

> Consider:
>
> %w{ one two three }.inject(Array.new) { |a, e| a << e if e != "three" }
>
> I would have expected that to return:
>
> [ "one", "two" ]
>
> Instead it returns nil.
>
> What am I missing? Or isn't it possible to use conditions in an inject 
> expression? If not, how would one go about archiving the same?