Lua: 从表中定义函数
2021-4-14 6:34:13
收藏:0
阅读:280
评论:2
NativeTable = {
["print"] = {},
["LoadResourceFile"] = {}
}
for k, v in pairs(NativeTable) do
k = function(...)
print("test")
end
end
这将会在 NativeTable 中定义它们而不是作为全局函数
print = function(...)
print("test")
end
LoadResourceFile = function(...)
print("test")
end
所以我试图使用表名定义一个全局函数
猜测我可以做类似这样的事情 但肯定有更好的方法?
NativeTable = {
["test"] = {},
["LoadResourceFile"] = {}
}
local function OverWriteFunction(FuncName, Func)
local Base = [[ = function(...)
print("jaa")
end
]]
local Final = FuncName .. Base
return Final
end
for k, v in pairs(NativeTable) do
load(OverWriteFunction(k))()
end
点赞
用户2858170
这对我来说没有太多意义:
NativeTable = {
["print"] = {},
["LoadResourceFile"] = {}
}
for k, v in pairs(NativeTable) do
k = function (...)
print("test")
end
end
首先你创建一个带有表元素print和LoadResourceFile的表。
然后你对表进行迭代,并使用函数替换表元素。
为什么不简单地这样做:
myTable = {
a = function() print("I'm function a") end,
b = function() print("I'm function b") end,
}
或
myTable = {}
myTable.a = function () print("I'm function a") end
然后你可以这样调用全局函数:myTable.a()
如果你坚持要在一个表之外拥有这些函数,你可以将它们简单地插入到全局环境表中。
for k, v in pairs(myTable) do _G[k] = v end
然后你可以在全局范围内调用a和b。但你尝试实现的任何目标都可能有更好的方法。
2021-04-14 10:30:38
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

在您的第一个示例中,您正在重新定义变量
k,它是在 for 循环中局部定义的,因此在定义它的一个循环之外将无法使用。如果可以的话,您绝对应该避免使用您的第二个示例,因为在字符串内定义代码并稍后加载它意味着,即使只有语法错误也不会在“编译”时显示,而只有当执行该准确部分时才会显示。而且,当您连接字符串以作为代码时,如果试图将其通用化,则会出现将某些东西错误地粘合在一起的风险。
如果我理解您要实现的是什么,我会说,它可能是这样的:
NativeTable = { ["test"] = {}, ["LoadResourceFile"] = {}, [3] = {} } for k, v in pairs(NativeTable) do if type(k) == "string" then _G[k] = function(...) print("output") end end end test() LoadResourceFile() -- _G[3]()它会输出:
output output这里我所做的就是使用
_G表,它是 lua 的全局环境,在括号中使用字符串定义的所有东西都将全局可用(全局可用的内容在该表中,因此要小心,因为您可以覆盖已定义的其他函数和变量!),即使将其写成普通函数调用。我还确保仅在 k 的类型为字符串时才执行此操作,否则您可能开始定义可以像最后注释掉的调用一样调用的函数。