I am trying to run the following array method using ruby but keep getting the following error:

I am trying to run the following array method using ruby but keep getting the following error:

arr = [2,4,6,8]
i = 0
while i < arr.length do
  puts arr[i + 1] - arr[i]
  i = i + 1
end

它在控制台上输出值,但也发出错误

ERROR (on RubyMine 7): C:\Ruby21\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load([=13=]=ARGV.shift) C:/.../file/application.rb 2 2 2 C:/Users/inoor/RubymineProjects/file/application.rb:4:in <top (required)>': undefined method-' for nil:NilClass (NoMethodError) from -e:1:in load' from -e:1:in'

Process finished with exit code 1

谁能帮我理解这是怎么回事?

每当您在 ruby 中看到 nil:NilClass (NoMethodError) 错误时,您应该寻找任何可能变成 nil 的对象。在您的情况下,您正在迭代一个数组并遇到边缘情况。

让我们详细看看您的代码:

# Start with this array of length 4
arr = [2,4,6,8]
# Initilize counter to 0
i = 0
# Run this loop while i < 4
while i < arr.length do
  puts arr[i + 1] - arr[i]
  # Increment by 1 each time
  i = i + 1
end

您 运行 进入 nil 对象的情况在最后。当 i=3i+1=4 并且您正在尝试访问数组中的索引 4 元素时。请记住,ruby 中的数组(与大多数语言一样)是从 0 开始索引的。所以你的数组有索引 0、1、2 和 3。如果你试图访问一个你没有定义值的索引,ruby 将 return nil。所以 arr[4]arr[400]arr[100000000] 都是 return 相同的东西:nil