我正在尝试使用ruby运行以下数组方法,但不断出现以下错误:

我正在尝试使用ruby运行以下数组方法,但不断出现以下错误:,ruby,rubymine-7,Ruby,Rubymine 7,它在控制台上输出值,但也会发出错误 RubyMine 7上的错误:C:\Ruby21\bin\ruby.exe-e $stdout.sync=true$stderr.sync=true;加载$0=ARGV.shift C:/…/file/application.rb 2 2 2 C:/Users/inoor/RubymineProjects/file/application.rb:4:in:“未定义的方法-”表示nil:NilClass NoMethodError from-e:1:in加载

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

RubyMine 7上的错误:C:\Ruby21\bin\ruby.exe-e $stdout.sync=true$stderr.sync=true;加载$0=ARGV.shift C:/…/file/application.rb 2 2 2 C:/Users/inoor/RubymineProjects/file/application.rb:4:in:“未定义的方法-”表示nil:NilClass NoMethodError from-e:1:in加载“from-e:1:in”

进程已完成,退出代码为1

有人能帮我理解发生了什么吗?

每当你在ruby中看到nil:NilClass NoMethodError错误时,你应该查找任何可能变成nil的对象。在您的例子中,您在一个数组上迭代,并且遇到了一个边缘情况

让我们详细了解一下您的代码:

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

您遇到nil对象的情况就在最后。当i=3,i+1=4时,您试图访问数组中的索引4元素。记住,与大多数语言一样,ruby中的数组也是0索引的。因此,数组具有索引0、1、2和3。如果您试图访问尚未定义值的索引,ruby将返回nil。因此,arr[4]、arr[400]和arr[100000000]都返回相同的值:nil

当i变为3时,会发生什么?当i=3时,arr[i+1]的返回值为零。你不能从零中减去。啊哈!谢谢,你已经知道了,我在这方面很在行。我正在学习,这很有趣。当有疑问时,玩电脑,把代码写在纸上。
# 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