`arr.length`在循环外工作,但在循环内导致错误

时间:2015-12-23 09:41:21

标签: ruby

我试图完成黑客挑战。当我尝试在循环中使用puts arr.length时,

n = gets.strip.to_i
arr = gets.strip
arr = arr.split(' ').map(&:to_i)
n.times do |i|
  puts arr.length
  arr = arr[i] - 2
  if arr[i] <= 0
    arr[i].delete
  end
end

我收到错误:

!in `block in': undefined method `length' for 3:Fixnum (NoMethodError)

我不理解,因为arr.length在循环之外工作。为什么我会收到此错误?

2 个答案:

答案 0 :(得分:1)

你已经在循环中重新分配给arr,我假设第一次通过循环已经有效但是在第二次传递时,arr现在是一个整数。

您应该在循环中使用不同的变量名称

答案 1 :(得分:1)

您将arr重新分配为Fixnumarr = arr[i] - 2。因此错误