Lua - 设置表(匿名)值

return{
    initime = 1;
    isneed= true;          -- 需要修改
    testfn=function()
        isneed = false;    --- 如何修改 "isneed" 的值?
    end
}

我想修改"isneed" 的值,我尝试了这样:

local testdata;
testdata={
    initime = 1;
    isneed= true;
    testfn=function()
        testdata.isneed = false;
    end
}

return testdata;

但我不想用这段代码,我觉得还有另外一种方法来设置这个值。

点赞
用户9922866
用户9922866

在 @luther 的评论基础上,你第二个示例中的代码应该能够运行。

local testdata = {
    initime = 1,
    isneed = true,
    testfn = function()
        testdata.isneed = false
        return
    end
}

print(testdata.isneed)
testdata.testfn()
print(test.data.isneed)

这应该输出以下内容:

true
false

或者,如果你想要更精细一些,你可以使用元表来重载回调运算符用于你的表格 testdata

local testdata = {
    initime = 1,
    isneed = true,
    testfn = function()
        testdata.isneed = false
        return
    end
}

testdata = setmetatable(testdata, {
    __call = function(self)
        return self.testfn()
    end
})

print(testdata.isneed)
testdata()
print(testdata.isneed)

这个示例的输出等同于上面的输出。根据你想要使用你的代码完成的任务不同,用元表重载回调运算符可能会给你带来更多的灵活性。使用这种方法,你可以稍微修改你的代码,像这样使用 __call 函数中的 self 参数:

local testdata = setmetatable({initime = 1, isneed = true}, {
    __call = function(self)
        self.isneed = false
        return
    end
})

print(testdata.isneed)
testdata()
print(testdata.isneed)

这将产生与第一个示例相同的输出。

2020-02-24 05:18:37