Lua函数如何返回 nil,即使函数内部返回值不是 nil?
2019-9-3 1:52:51
收藏:0
阅读:164
评论:2
我创建了一个函数,通过随机生成包含数字的表。我反复调用这个函数,直到找到至少一个正确的结果为止。一旦我确认至少存在一个这样的结果,我就停止函数并返回表格。
当我创建包含小数值的表格时,没有任何问题。然而,一旦随机数增加到数百范围,函数就开始返回 nil,即使在返回前该表格是正确的。
local sort = table.sort
local random = math.random
local aMin, aMax = 8, 12
local bMin, bMax = 200, 2000
local function compare( a, b )
return a < b
end
local function getNumbers()
local valid = false
local numbers = {}
-- 生成一个随机长度的表格,包含随机数值。
for i = 1, random( aMin, aMax ) do
numbers[i] = random( bMin, bMax )
end
sort( numbers, compare )
-- 检查表格中是否存在特定的数列。
for i = 2, #numbers do
if numbers[i-1]+1 == numbers[i] or numbers[i-1] == numbers[i] then
-- 找到数列,停止。
valid = true
break
end
end
for i = 1, #numbers-1 do
for j = i+1, #numbers do
if numbers[j] % numbers[i] == 0 and numbers[i] ~= 1 then
valid = true
break
end
end
end
if valid then
print( "函数内部:", numbers )
return numbers
else
getNumbers()
end
end
local numbers = getNumbers()
print( "函数外部:", numbers )
据我理解,这个函数应该无限循环,直到我找到一个有效的数列。根据我的代码,函数结束的唯一方式是 valid 为 true。
有时,特别是在使用大数值时,函数会简单地输出一个 nil 值。这里发生了什么?
点赞
用户2616735
在 if valid then 的 else 情况下,您没有返回任何内容。您只在 valid 情况下返回任何内容。在 else 情况下,递归调用可能会返回一些东西,但是您会忽略该返回值。您看到的打印输出对应于递归调用返回的内容;它没有传递给原始调用。
您意思是 return getNumbers()。
2019-09-03 01:59:11
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

你只是在
getNumbers()中使用递归而不是return getNumbers()。这意味着如果进入递归,最终返回的值将无论如何都是nil。