执行此操作时,它无法访问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
?
答案 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个元素是1
,array[1]
是2
,array[1]+3
是2+3
,5
。最后一个元素是5
,array[5]
是nil
,因为array
只有5个元素,而在Ruby中,数组是基于0的索引,然后array[5] + 3
是nil + 3
,它会为您提供NoMethodError
。