在表中放置函数时遇到问题。“新函数附近缺少括号。”
2022-1-18 23:48:7
收藏:0
阅读:319
评论:2
我在名为“hframe.lua”的文件中有这段代码。
table.insert(handler.class, framename)
local func = [[
function new(())
print("Hello Stackoverflow!")
end
]] --函数测试本身。
local a="table.insert(handler.class."..framename..", "..func..")" --我将它分为两部分,以便我更容易阅读。
print(a) --读出变量,以便我可以看到它的样子。
local b=load(a) --将其加载
b() --空值错误。太好了。
“framename”是来自另一个文件的常量,简单地被声明为“frame”。这个错误是一个简单的空值错误。在运行b()时,它抛出一个本地空值错误。通过一个断言,我已经发现了这个错误。
错误:线程错误(线程:0x04c7d2f0)
uicode/hframe.lua:16: [string "table.insert(handler.class.frame, function ne..."]:1: '(' expected near 'new'
stack traceback:
[C]:在函数'assert'中
uicode/hframe.lua:16:在主块中
[C]:在函数'require'中
uicode/handlerthread.lua:165:在主块中
stack traceback:
[string "boot.lua"]:777: 在函数中 <[string“boot.lua”]:773>
[C]:在函数'error'中
[string“boot.lua”]:631:在函数中 <[string“boot.lua”]:630>
[string“boot.lua”]:604:在函数中 <[string“boot.lua”]:594>
[C]:在函数'xpcall'中
我不完全确定为什么会抛出这个错误,因为我明确定义了它为函数new()。我做错了什么?
原文链接 https://stackoverflow.com/questions/70763765
点赞
stackoverflow用户2858170
`function new() end`
是 `new = function () end` 的语法糖。
这是一种赋值方式,它没有返回值。因此,在需要使用值的地方,您无法使用函数定义。
在您的情况下,执行的代码是
table.insert(handler.class.someFrameName, function new () print("Hello Stackoverflow!") end )
对于 Lua 中给定表达式列表中出现的 `function` 关键字,唯一有意义的是匿名函数,并且它期望在 `function` 后面跟着 `(`,但却找到了 `new`。
您有两个选项来解决这个问题。
如果 `function new() end` 等价于 `new = function () end`,那么 `function () end` 必须解析为函数值。因此,我们可以在原地创建函数值:
table.insert(handler.class.someFrameName, function () print("Hello Stackoverflow!") end )
我将让您自己在要加载的字符串中实现此功能。
另一个选项是先定义函数。您可以在字符串或 `load` 调用的作用域中完成这个操作。
function new() print("Hello Stackoverflow") table.insert(handler.class.someFrameName, new)
2022-01-19 10:59:50
评论区的留言会收到邮件通知哦~
推荐文章
- 【上海普陀区】内向猫网络招募【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 模式将字符串(嵌套数组)转换为真正的数组?
- 如何创建一个 lua 脚本以针对特定键为 fluentbit 进行限流
- 如何在Lua中将变量从Lua推送到C ++
Lua的
load()
函数在编译代码失败时返回nil
和出现的错误。由于传递的代码是无效的,因此b
是nil
。因此,当您尝试调用它时会引发错误。代码无效的原因是因为当函数声明用作表达式时,必须省略函数名称,例如:
table.insert(sometable, function() … end)
请注意,您大多数情况下不需要动态创建代码,以下代码将有效:
table.insert(handler.class\[framename\], function() … end)