Function 如何收集加载中的函数return

Function 如何收集加载中的函数return,function,variables,lua,runtime-error,Function,Variables,Lua,Runtime Error,我现在开始研究lua中的load()函数,但在获取函数返回的值时遇到了问题 我尝试了这两种方法来使用load()执行函数并收集它们的值 函数sumvalues() 返回5+3 结束 本地func=“sumvalues()” 打印(加载(函数)) 本地func=“返回5+3” 打印(加载(函数)) 但它们只返回函数,不返回从它们返回的值 功能:0000000000 cf0e50 功能:0000000000 CF0DF0 有人知道我如何使用load()执行函数并收集他们的返回值吗? 我还想知道如

我现在开始研究lua中的
load()
函数,但在获取函数返回的值时遇到了问题

我尝试了这两种方法来使用
load()
执行函数并收集它们的值

函数sumvalues()
返回5+3
结束
本地func=“sumvalues()”
打印(加载(函数))
本地func=“返回5+3”
打印(加载(函数))
但它们只返回函数,不返回从它们返回的值

功能:0000000000 cf0e50
功能:0000000000 CF0DF0
有人知道我如何使用
load()
执行函数并收集他们的
返回值吗?

我还想知道如何使用与
load()
中的变量同名的字符串来收集变量,我尝试这样做:

hello=“hello World”
打印(加载(“你好”))
但他给出了这个错误:

nil[字符串“hello”]:1:附近出现语法错误

谁知道我怎么能做到这一点?谢谢你的关注

将字符串传递给
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
返回的函数是用第一个
()
调用的,下面的
(21)
调用由块返回的函数。

如果
load
返回一个函数,也许您应该调用它<代码>打印(加载(“返回5+3”)())
似乎很有希望……@exnihilo成功了,非常感谢您的精彩回答