如何在加载中收集函数 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()"
将不起作用,因为 func
对 load
.
不可见
另一个例子:
> 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返回的函数
我现在开始研究 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()"
将不起作用,因为 func
对 load
.
另一个例子:
> 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返回的函数