为什么 `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个元素是1
,array[1]
是2
,array[1]+3
是2+3
也就是5
。最后一个元素是 5
,array[5]
是 nil
因为 array
只有 5 个元素,而在 Ruby 中,数组是从 0 开始索引的,然后 array[5] + 3
是 nil + 3
这给你 NoMethodError
.
当我这样做时,它不会访问 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个元素是1
,array[1]
是2
,array[1]+3
是2+3
也就是5
。最后一个元素是 5
,array[5]
是 nil
因为 array
只有 5 个元素,而在 Ruby 中,数组是从 0 开始索引的,然后 array[5] + 3
是 nil + 3
这给你 NoMethodError
.