Lua中迭代表并调用方法
2021-5-15 7:54:23
收藏:0
阅读:154
评论:2
我正在尝试迭代函数表并依次调用每个函数。 我一直得到 'attempt to access a field/method NIL value' 的错误。 其中一些错误很明显,但有些让我困惑不解。
tests={}
function tests.test1()
print("test1 running\n")
end
function tests.test2()
print("test2 running\n")
end
function tests.test3()
print("test3 running\n")
end
print(tests)
-- 为什么tests.i()或tests:i()没有起作用?
for i,x in pairs(tests) do
print("x is")
print(x)
print("i is")
print(i)
--tests.i() -- 尝试调用NIL值的i字段
--tests.i(tests) -- 同上
--tests:i() -- 尝试调用NIL值的i方法
--tests:i(tests) -- 同上
tests[i]() -- 成功!
--tests.x() -- 尝试调用NIL值的x字段
--tests.x(tests) -- 同上
--tests:x() -- 尝试调用NIL值的x方法
--tests[x]() -- 尝试调用NIL值的?字段
end
--所有这些都能正常工作
tests.test1(tests)
tests:test1()
tests.test2(tests)
tests:test2()
tests.test3(tests)
tests:test3()
为什么tests.i()方法没有起作用,或者tests.i(tests)是期望一个'self'参数,那么为什么tests:i()没有起作用? 最后的示例显示在循环外调用所有方法都能正常工作,这使得它更加难以理解。
点赞
用户3342050
除非你为其指定占位符,否则在调用tests:test1()时插入的参数将被丢弃。
tests = {}
function tests.test1( a ) -- 你只能使用列出的参数
local a = a or ''
print( 'test1运行中', a )
end
你也可以调用 x() 来执行循环中的这些函数。
-- 测试 i , 测试 i。 1, 2, 3?
for i, x in pairs( tests ) do
print( string.format('i是 "%s"', i ) )
print( 'x是', x )
x() -- 与调用 tests["i"]() 相同
end
tests:test1()
i是 "test1"
x是 function: 0x1420f20
test1运行中
test1运行中 table: 0x1421f10
2021-05-15 08:39:52
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

tests.i()是tests["i"]()的简写形式。tests:i()是tests["i"](tests)的简写形式。在你的循环中,
for i, x in pairs(tests) do,i在各自循环中分别为"test1"、"test2"和"test3"。所以tests[i]()解析为tests["test1"]()等,即tests.test1()请确保你理解
tests.i是tests["i"]的简写形式,不是tests[i]!所以在一种情况下,你用字符串"i"索引tests,而在第二种情况下,你将用变量i的值对tests进行索引,而这个值是tests的一个键之一。在你的循环中,值是函数,所以你可以直接调用
x,而不必调用tests[i]。