即使函数中的返回值不是nil,Lua函数如何返回nil?

即使函数中的返回值不是nil,Lua函数如何返回nil?,lua,Lua,我创建了一个函数,可以伪随机创建一个包含数字的表。然后我循环这个函数,直到找到至少正确的结果。一旦我确认至少存在一个这样的结果,我就会停止函数并返回表 当我创建包含小值的表时,没有问题。然而,一旦随机数增长到数百,函数就开始返回nil,即使在我返回它之前,表是真的 本地排序=table.sort 局部随机=数学随机 局部aMin,aMax=8,12 本地bMin,bMax=2002000 局部函数比较a,b 返回a

我创建了一个函数,可以伪随机创建一个包含数字的表。然后我循环这个函数,直到找到至少正确的结果。一旦我确认至少存在一个这样的结果,我就会停止函数并返回表

当我创建包含小值的表时,没有问题。然而,一旦随机数增长到数百,函数就开始返回nil,即使在我返回它之前,表是真的

本地排序=table.sort 局部随机=数学随机 局部aMin,aMax=8,12 本地bMin,bMax=2002000 局部函数比较a,b 返回a 有时,通常情况下,对于较大的数字,函数只向函数外部输出一个nil值。这里发生了什么?

您只是在执行getNumbers递归,而不是返回getNumbers。这意味着,如果输入递归,无论发生什么情况,最终返回的值都将为零。

您只是在执行getNumbers递归,而不是返回getNumbers。这意味着,如果输入递归,则无论发生什么情况,最终返回的值都将为零。

在if-valid-then的else情况下,您不会返回任何内容。您只返回有效案例中的任何内容。在else情况下,递归调用可能会返回某些内容,但随后您将忽略该返回值。您看到的打印对应于递归调用的返回;这不是最初的通话

您的意思是返回getNumbers。

在else的情况下,如果有效,则不返回任何内容。您只返回有效案例中的任何内容。在else情况下,递归调用可能会返回某些内容,但随后您将忽略该返回值。您看到的打印对应于递归调用的返回;这不是最初的通话


你的意思是返回getNumbers。

但事实并非如此,对吗?如果valid为true,则返回数字。如果valid不是true,那么我重复这个函数。最终valid将为true,它将在函数内打印:并给出一个表引用,但函数外的打印将打印nil。还是我在这里遗漏了什么?@JamesT。通过在递归调用中不使用return,您就丢弃了递归的值。真不敢相信我在这里空白了将近一个小时,在这里发布函数的一分钟内就被修复了。但事实并非如此,对吗?如果valid为true,则返回数字。如果valid不是true,那么我重复这个函数。最终valid将为true,它将在函数内打印:并给出一个表引用,但函数外的打印将打印nil。还是我在这里遗漏了什么?@JamesT。通过在递归调用中不使用return,您就丢弃了递归的值。真不敢相信我在这里空白了将近一个小时,在这里发布函数的一分钟内就被修复了。