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完成处理
有人可以帮我理解发生了什么吗?
答案 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=3
,i+1=4
并且您尝试访问数组中的索引4元素时。请记住,ruby中的数组(与大多数语言一样)都是0索引的。因此,您的数组具有索引0,1,2和3.如果您尝试访问尚未定义值的索引,则ruby将返回nil
。因此arr[4]
,arr[400]
和arr[100000000]
都返回相同的内容:nil
。