如何在加载中收集函数 return

how do I collect the function return in load

我现在开始研究 lua 中的 load() 函数,但我无法获得函数 returns

的值

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

function sumvalues()
    return 5+3
end

local func = "sumvalues()"

print(load(func))

local func = "return 5+3"

print(load(func))

但它们只是 return 函数,而不是 return 从它们

中提取的值
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编译为一个函数体,returns调用sumvalues返回的值.请注意,由于 load 在全局环境中编译其块,因此 local func = "return sumvalues()" 将不起作用,因为 funcload.

不可见

另一个例子:

> hello = "return 'Hello World'"
> load(hello)()
Hello World
> print(load(hello))
function: 0x55e069c53580
> print(load(hello)())
Hello World

这里,chunk "return 'Hello World'" 被编译为 returns 字符串 '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 通过编译一个本身 returns 一个 [=46] 的函数的块来创建这样一个函数=] 是否接受参数。必须调用 load 返回的函数才能访问真正感兴趣的函数。上面看到load返回的函数是用第一个()调用的,后面的(21)调用的是chunk返回的函数