Ruby:未定义的方法`length';对于1:整数(NoMethodError)
我得到以下错误::4:在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) # ... 结束 然后在没有[…]的情况下最初调用它 我建议代码的固定版本如下所示:
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