如何解决如何收集负载返回的函数
我现在开始研究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()
执行功能并收集他们的return
吗?
我还想知道如何使用与load()
中的变量同名的字符串来收集变量,我试图这样做:
hello = "Hello World"
print(load("hello"))
但是他给出了这个错误:
nil [string "hello"]:1: syntax error near <eof>
有人会知道我该怎么做吗?感谢您的关注!
解决方法
当您将字符串传递给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)
则调用了块返回的函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。