Lua:如何根据条件执行不同的块?
2013-11-28 22:18:51
收藏:0
阅读:90
评论:1
我有这个表格:
no_table ={
{a="3", b="22", c="18", d="ABC"},
{a="4", b="12", c="25", d="ABC"},
{a="5", b="15", c="16", d="CDE"},
}
这个函数:
function testfoo()
i = 1
while no_table[i] ~= nil do
foo(no_table[i])
i = i + 1
end
end
以及这个 foo 函数:
function foo(a,b,c,d)
if no_table[i][4] ~= no_table[i-1][4]
then
print (a+b)
elseif no_table[i][4] == no_table[i-1][4]
then
print (b+c)
end
end
你能帮我找出:
一种检查两个表格是否相等的方法(目前它会给出“无法索引nil”错误)
一种执行“print (b+c)”代码的方法,如果等式为真,则仅执行它; 如果不为真,则先执行“print (a+b)”,然后是“print(b+c)”,而不会重复代码。
原文链接 https://stackoverflow.com/questions/7296149
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
很多问题我都看到了。首先,我从不依赖于在外部函数中设置
i
,它应该是一个本地变量,并在需要时作为参数传递。也就是说,在尝试访问no_table [x] [y]
之前,您需要检查no_table [x]
是否存在。所以,对于foo
,你会有:function foo(a,b,c,d) if not (no_table[i] and no_table[i-1] and no_table[i][4] == no_table[i-1][4]) then print (a+b) elseif no_table[i] and no_table[i-1] and no_table[i][4] == no_table[i-1][4] then print (b+c) end end
此外,对于表中的数字,如果要进行算术运算,则需要删除引号:
no_table ={ {a=3, b=22, c=18, d="ABC"}, {a=4, b=12, c=25, d="ABC"}, {a=5, b=15, c=16, d="CDE"}, }
接下来,在
testfoo
中,您正在传递一个表,因此您需要在函数调用中拆分a,b,c和d的值,或者您可以只传递表本身并在foo中处理它:function foo(t) if not (no_table[i] and no_table[i-1] and no_table[i][4] == no_table[i-1][4]) then print (t.a+t.b) elseif no_table[i] and no_table[i-1] and no_table[i][4] == no_table[i-1][4] then print (t.b+t.c) end end
这将导致:
> testfoo() 25 37 31
编辑:最后一个清理,因为条件相同,您可以使用
else
而不是elseif
:function foo(t) if no_table[i] and no_table[i-1] and no_table[i][4] == no_table[i-1][4] then print (t.b+t.c) else print (t.a+t.b) end end