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=3
、i+1=4
并且您正在尝试访问数组中的索引 4 元素时。请记住,ruby 中的数组(与大多数语言一样)是从 0 开始索引的。所以你的数组有索引 0、1、2 和 3。如果你试图访问一个你没有定义值的索引,ruby 将 return nil
。所以 arr[4]
、arr[400]
和 arr[100000000]
都是 return 相同的东西:nil
。
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:inload' 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=3
、i+1=4
并且您正在尝试访问数组中的索引 4 元素时。请记住,ruby 中的数组(与大多数语言一样)是从 0 开始索引的。所以你的数组有索引 0、1、2 和 3。如果你试图访问一个你没有定义值的索引,ruby 将 return nil
。所以 arr[4]
、arr[400]
和 arr[100000000]
都是 return 相同的东西:nil
。