奇怪的空?识别行为
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
我正在尝试制作一种方法,该方法 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