奇怪的空?识别行为

Strange empty? recognition behavior

我正在尝试制作一种方法,该方法 returns 通过螺旋读取二维数组来生成数组。我正在使用递归,然后想在传入的参数数组为空时停止它。

@arr = []

def spiral(array)
  array.to_a.empty? ? true :  @arr << array.shift
  spiral(array.transpose.reverse)
end

但是,当在递归行中添加时,empty 方法无法将“[]”识别为空,并抛出一个 "stack level too deep" 错误,我认为这是一个无限循环,因为它没有停止条件?

为了停止递归,您的函数需要在达到所需条件时return(或至少不再调用自身)。在您的代码中,该函数只是生成 true 但继续执行,最后调用自身。

尝试这样的事情:

@arr = []

def spiral(array)
  return @arr.flatten if array.to_a.empty?
  @arr << array.shift
  spiral(array.transpose.reverse)
end