rubyのinjectにはバグがあるのか?

>> [1, 2, 2, 3, 2].inject([]){|a,i|a<<i}
=> [1, 2, 2, 3, 2]
>> [1, 2, 2, 3, 2].inject([1]){|a,i|p a;p a[-1];a<<i}
[1]
1
[1, 1]
1
[1, 1, 2]
2
[1, 1, 2, 2]
2
[1, 1, 2, 2, 3]
3
=> [1, 1, 2, 2, 3, 2]
>> [1, 2, 2, 3, 2].inject([1]){|a,i|p a;p a[-1];a<<i if i!=a[-1]}
[1]
1
nil
NoMethodError: undefined method `[]' for nil:NilClass
        from (irb):204
        from (irb):204:in `inject'
        from (irb):204:in `each'
        from (irb):204:in `inject'
        from (irb):204
        from :0
>> [1, 2, 2, 3, 2].inject([1]){|a,i|b=a.dup;p a;p b[-1];a<<i if i!=b[-1]}
[1]
1
TypeError: can't dup NilClass
        from (irb):205:in `dup'
        from (irb):205
        from (irb):205:in `inject'
        from (irb):205:in `each'
        from (irb):205:in `inject'
        from (irb):205
        from :0

わからない…このへんすごく怪しい。

injectがおかしいせいで

>> a=[];(r="1 2 3 5 7 8".split(/\s+/)).unshift("E").zip(r[1,r.size].push("E")).map{|i|(i[0]!="E"&&i[1].to_i==i[0].to_i+1)?"-":i}.flatten[1..-2].map{|i|a<<i if a[-1]!=i};a
=> ["1", "-", "3", "5", "7", "-", "8"]

がすすめない…まあ、コードが懲りすぎなんだけど haskell意識しすぎた。

http://builder.japan.zdnet.com/sp/ruby-doukaku-panel/story/0,3800086254,20369264,00.htm

gsubつかったらかっこわるい。

>> a=[];(r="1 2 3 5 7 8".split(/\s+/)).unshift("E").zip(r[1,r.size].push("E")).map{|i|(i[0]!="E"&&i[1].to_i==i[0].to_i+1)?"-":i}.flatten[1..-2].map{|i|a<<i if a[-1]!=i};a.join(",").gsub(/,-,/,"-")
=> "1-3,5,7-8"

もうおそいからやめた。