Issue #9139 has been updated by duerst (Martin Dürst).

Status changed from Open to Rejected

Nothing is wrong with index.

Array.new(4, Hash.new) creates an array with four copies of one and the same new hash. Your code is the same as

h = Hash.new
[h, h, h, h].each_with_index{ |item, index| item["index"] = index; item["value"] = 10*index; p index;}

Maybe what you want is this:

> Array.new(4) {|_| Hash.new}.each_with_index{ |item, index| item["index"] = index; item["value"] = 10*index; p index;}
0
1
2
3
-> [{"index"=>0, "value"=>0},
    {"index"=>1, "value"=>10},
    {"index"=>2, "value"=>20},
    {"index"=>3, "value"=>30}]
----------------------------------------
Bug #9139: each_with_index
https://bugs.ruby-lang.org/issues/9139#change-43082

Author: dostapn (Dima Ostapenko)
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


Whats wrong with index?

> Array.new(4, Hash.new).each_with_index{ |item, index| item["index"] = index; item["value"] = 10*index; p index;}
0
1
2
3
=> [{"index"=>3, "value"=>30},
 {"index"=>3, "value"=>30},
 {"index"=>3, "value"=>30},
 {"index"=>3, "value"=>30}]




-- 
http://bugs.ruby-lang.org/