gpt4 book ai didi

function - 我如何收集负载返回的函数

转载 作者:行者123 更新时间:2023-12-03 09:02:51 25 4
gpt4 key购买 nike

我现在开始研究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)则是调用块返回的函数的。

关于function - 我如何收集负载返回的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63478037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com