该程序,我正在编写lua脚本,并不支持保存upvalues。因此,在恢复程序状态后,函数fun
无效:
gen=function(par)
local a=par
return function() print(a) end
end
fun=gen(2)
另一方面,没有像gen
这样的闭包的简单函数会被正常保存和加载。
我想在上面创建一组类似于fun
的函数,其中参数a
的值不同。程序化等同于:
fun1=function()
local a=1
print(a)
end
fun2=function()
local a=2
print(a)
end
--and so on
是否有可能这样做?
答案 0 :(得分:1)
您可以创建一个与您的函数一样的表(但是,因为它是一个表,所以应该可以正确地恢复它):
gen = function(par)
return setmetatable({a = par}, {
__call = function(self)
print(self.a)
end
})
end
fun = gen(1) -- Note: fun is a table, but can be called like a function.
fun()
如果您需要向表函数添加参数,可以通过向__call
元方法添加参数来实现:
gen = function(par)
return setmetatable({a = par}, {
__call = function(self, something)
print(self.a, something)
end
})
end
fun = gen(1)
fun("foobar") -- Outputs "1 foobar"