如何在load中收集函数返回值
2020-8-19 4:50:59
收藏:0
阅读:169
评论:1
我现在开始学习lua中的load()函数,但我无法获取该函数返回的值
我尝试了下面两种方法来执行load()函数并收集值
function sumvalues()
return 5+3
end
local func = "sumvalues()"
print(load(func))
local func = "return 5+3"
print(load(func))
但它们都只返回函数,而不是返回值
function: 0000000000cf0e50
function: 0000000000cf0df0
有没有人知道我如何在load()中执行函数并收集其返回值?
我还想知道如何使用与变量相同的字符串名称在load()中收集变量,我尝试过这样做:
hello = "Hello World"
print(load("hello"))
但他会输出以下错误:
nil [string "hello"]:1: syntax error near <eof>
是否有人知道我如何实现这个功能?感谢您的关注!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

当您将字符串传递给
load时,该代码块会在全局环境中编译,并返回一个执行该代码块的函数。要执行该代码块,您必须调用该函数:> function sumvalues() >> return 5+3 >> end > func = "return sumvalues()" > load(func) function: 0x55e069c2a490 > load(func)() 8在此示例中,
func是一个字符串,被视为一个代码块,并由load编译为返回调用sumvalues后的值的函数体。请注意,由于load在全局环境中编译其代码块,因此local func = "return sumvalues()"无法工作,因为func对load不可见。另一个示例:
> hello = "return 'Hello World'" > load(hello)() Hello World > print(load(hello)) function: 0x55e069c53580 > print(load(hello)()) Hello World在这个示例中,代码块
"return 'Hello World'"被编译为返回字符串'Hello World'的函数。您可以调用该函数,打印该函数的值,或打印调用该函数后返回的值。如果在代码字符串前面添加
"return "看起来工作量太大,您可以创建一个名为chunkify的函数:function chunkify (s) return "return " .. s end > load(chunkify("5+3"))() 8 > load(chunkify("'Hello World'"))() Hello World您仍在传递包含要运行的代码的字符串,因此该代码中的任何字符串也需要加引号。
> load(chunkify("function (x) return 2*x end"))()(21) 42由
load返回的函数不需要任何参数,但是您可以使用load创建这样的函数,方法是编译块本身返回需要参数的函数。必须调用由load返回的函数才能访问感兴趣的实际函数。在上面的示例中,请注意使用第一个()调用由load返回的函数,并使用(21)调用代码块返回的函数。