为什么不能“每个”访问第一个元素?

时间:2015-01-24 00:42:04

标签: ruby iterator each

执行此操作时,它无法访问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

1 个答案:

答案 0 :(得分:1)

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

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+35。最后一个元素是5array[5]nil,因为array只有5个元素,而在Ruby中,数组是基于0的索引,然后array[5] + 3nil + 3,它会为您提供NoMethodError