Ruby:未定义的方法`length';对于1:整数(NoMethodError)

Ruby:未定义的方法`length';对于1:整数(NoMethodError),ruby,methods,Ruby,Methods,我得到以下错误::4:在print_数组中:1:Integer(NoMethodError)的未定义方法length' 每当我试图运行代码时。不了解问题所在。您实际上是在调用print\u array(1),这不是一个有效的调用 您需要的是: print_数组([arr[i]]) 或者,您可以使用阵列切片: print_数组(arr[i,1]) 或者更改参数,使其默认为数组: def打印阵列(*arr) # ... 结束 然后在没有[…]的情况下最初调用它 我建议代码的固定版本如下所示:

我得到以下错误::4:在
print_数组中:1:Integer(NoMethodError)的未定义方法
length'

每当我试图运行代码时。不了解问题所在。

您实际上是在调用
print\u array(1)
,这不是一个有效的调用

您需要的是:

print_数组([arr[i]])
或者,您可以使用阵列切片:

print_数组(arr[i,1])
或者更改参数,使其默认为数组:

def打印阵列(*arr)
# ...
结束
然后在没有
[…]
的情况下最初调用它

我建议代码的固定版本如下所示:

def打印数组(arr,索引=0) 如果索引>arr.length,则返回 p arr[索引] 打印数组(arr,索引+1) 结束
或者可能:

def print_array(arr)
  # YOUR WORK HERE
  i = 0
  if i > arr.length

  else
    p print_array(arr[i])
    i += 1
  end
end 

试着在代码开头插入以下代码行来运行代码:
put“arr={arr}”
。另一种快速调试方法:
p(arr:arr)
我最初试图通过调用“print\u array([1,2,3])”来测试它,但在代码到达调用之前就出现了错误。当我将星号添加到参数时,它似乎确实起作用,我只是得到了一个系统堆栈错误,但这是我尝试实践的递归的一个问题。仍然不明白为什么会出现初始错误,因为#length绝对是Ruby的内置方法。它是数组的内置方法。你用一个整数来调用它。请注意,您在
else
块中进行的调用不正确。
def print_array(arr)
  return unless arr.any?

  p arr[0]

  print_array(arr.drop(1))
end