0
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=true;$stderr.sync=true;load($0=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'

进程以退出代码 1 结束

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

4

1 回答 1

0

每当你nil:NilClass (NoMethodError)在 ruby​​ 中看到错误时,你应该寻找任何可能变成的对象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.

于 2015-02-18T21:27:03.310 回答