我是 lua 新手,想要将函数存储在表中,并在“存储时间”给出参数。
尝试了这段代码,但显然不是我想要的。
local functable = {}
local function myfunc(x,y)
print(x ,y)
end
table.insert(functable, {func = myfunc})
table.remove(functable).func("hello", "World")
我想将变量存储在“插入”处,因此我尝试将参数存储在表中:
functable = {}
function myfunc()
print(functable[#functable].p1 ,functable[#functable].p2)
end
table.insert(functable, {func = myfunc, p1="Hello", p2="World"})
table.remove(functable).func()
但是这段代码不起作用。
有人能指出我正确的方向吗?
最佳答案
您的代码的问题是,一旦您执行table.remove
,您的p1
和p2
就无法在myfunc<中检索
使用functable[#functable]
。如果您输入第二个函数,您将看到打印,但打印将带有表中下一个函数的参数。
table.insert(functable, {func = myfunc, p1="Goodbye", p2="World~"})
table.insert(functable, {func = myfunc, p1="Hello", p2="World!"})
table.remove(functable).func()
输出:
Goodbye World~
我建议的解决方案是在表中设置参数,然后在调用它时将它们应用到您的函数:
functable = {}
local function myfunc(x,y)
print(x ,y)
end
table.insert(functable, {func = myfunc, params = {"Goodbye", "World~"}})
table.insert(functable, {func = myfunc, params = {"Hello", "World!"}})
local action1 = table.remove(functable)
local action2 = table.remove(functable)
action1.func(table.unpack(action1.params))
action2.func(table.unpack(action2.params))
另一种解决方案是包装您的函数并将参数设置为上值。
这是一个例子:
functable = {}
function myfunc(...)
local params = {...}
local function func()
print(params[1] ,params[2])
end
return func
end
table.insert(functable, {func = myfunc("Goodbye", "World~")})
table.insert(functable, {func = myfunc("Hello", "World!")})
table.remove(functable).func()
table.remove(functable).func()
关于function - lua函数包括表中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713171/