我试图使用ruby运行以下数组方法,但不断收到以下错误:

时间:2015-02-18 20:17:44

标签: ruby rubymine-7

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

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

  

错误(在RubyMine 7上):C:\ Ruby21 \ bin \ ruby​​.exe -e   $ stdout.sync =真; $ stderr.sync = TRUE;负载($ 0 = ARGV.shift)   C:/.../文件/ application.rb中   2 2 2   C:/Users/inoor/RubymineProjects/file/application.rb:4:in <top (required)>': undefined method - &#39; for nil:NilClass(NoMethodError)     来自-e:1:load' from -e:1:in&#39;

     

使用退出代码1完成处理

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

1 个答案:

答案 0 :(得分:0)

每当你在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将返回nil。因此arr[4]arr[400]arr[100000000]都返回相同的内容:nil