Ruby运行打印数组代码报错undefined method `length' for 1:Integer求助
Ruby数组打印代码故障排查
错误根因
- 递归传参错误:代码中
print_array(arr[i])的入参是数组的单个元素(Integer类型),下一层递归执行arr.length时,Integer类型没有length方法,直接触发NoMethodError报错。 - 终止逻辑失效:索引i定义在函数内部,每次递归都会重置为0,且初始判断
i > arr.length的逻辑永远不成立,就算传参正确也会陷入无限递归。 - 遍历逻辑错误:i的自增写在递归调用之后,完全不会生效,无法实现数组元素的迭代遍历。
修正后代码
def print_array(arr, i = 0) # 递归终止条件:索引超出数组范围直接返回 return if i >= arr.length # 打印当前索引对应的元素 p arr[i] # 传入递增后的索引,递归遍历下一个元素 print_array(arr, i + 1) end
调用示例
print_array([1,2,3,4]) # 输出依次为 1 2 3 4
内容的提问来源于stack exchange,提问作者Ahmad Cheers
相关产品推荐
相关产品推荐

