为什么 `each` 不能访问第一个元素?

Why can't `each` access the first element?

当我这样做时,它不会访问 array[0]:

array = [1,2,3,4,5]
array.each {|x| puts "Position: #{x}, Orig: #{array[x]}, Mod: #{array[x] + 3}" }

结果:

Position: 1, Orig: 2, Mod: 5
Position: 2, Orig: 3, Mod: 6
Position: 3, Orig: 4, Mod: 7
Position: 4, Orig: 5, Mod: 8

为什么 each 无法访问位置 0

这实际上是您得到的输出吗?这就是我所看到的:

array = [1,2,3,4,5]
array.each {|x| puts "Position: #{x}, Orig: #{array[x]}, Mod: #{array[x] + 3}" }

结果:

Position: 1, Orig: 2, Mod: 5
Position: 2, Orig: 3, Mod: 6
Position: 3, Orig: 4, Mod: 7
Position: 4, Orig: 5, Mod: 8
NoMethodError: undefined method `+' for nil:NilClass
    from (irb):2:in `block in irb_binding'
    from (irb):2:in `each'
    from (irb):2
    from /Users/amitgupta/.rvm/rubies/ruby-2.0.0-p353/bin/irb:12:in `<main>

当您说 array.each { |x| ... } 时,x 不会遍历 array 中元素的索引,它会遍历元素本身。第0个元素是1array[1]2array[1]+32+3也就是5。最后一个元素是 5array[5]nil 因为 array 只有 5 个元素,而在 Ruby 中,数组是从 0 开始索引的,然后 array[5] + 3nil + 3 这给你 NoMethodError.