Исходя из комментария @ Лютера, код, который вы используете во втором примере, должен работать.
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)
Вывод этого примера эквивалентен выводу выше. В зависимости от того, что именно вы будете sh выполнять с вашим кодом sh, перегрузка оператора вызова с помощью метатаблицы может предложить вам больше гибкости. Используя этот подход, вы могли бы немного изменить свой код, используя этот параметр, используя параметр self
в функции __call
:
local testdata = setmetatable({initime = 1, isneed = true}, {
__call = function(self)
self.isneed = false
return
end
})
print(testdata.isneed)
testdata()
print(testdata.isneed)
. В результате вы получите тот же результат, что и в первом примере.