Lua-设置表(匿名)值

问题描述 投票:0回答:1
return{
    initime = 1;
    isneed= true;          -- need to modify
    testfn=function()
        isneed = false;    ---how to modify the "isneed" value?
    end
}

我想修改必要的值,我已经尝试过这样

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

return testdata;

但是我不想要的代码,我认为还有另一种设置值的方法。

lua
1个回答
0
投票

基于@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)

此示例的输出等同于上述输出。根据您希望用代码完成什么,将调用操作符重载为元表可以为您提供更大的灵活性。使用这种方法,您可以像在self函数中使用__call参数那样稍微更改代码:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.