Lua使值增加不变

时间:2016-05-30 22:45:11

标签: function lua

该程序,我正在编写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

是否有可能这样做?

1 个答案:

答案 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"

查看Lua manual, section 'Metatables and Metamethods'了解详情!