Lua - установить табличное (анонимное) значение - PullRequest
0 голосов
/ 23 февраля 2020
return{
    initime = 1;
    isneed= true;          -- need to modify
    testfn=function()
        isneed = false;    ---how to modify the "isneed" value?
    end
}

Я хочу изменить значение isneed, я попробую вот так

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

return testdata;

, но код, который мне не нужен, я думаю, есть другой способ установить значение.

1 Ответ

1 голос
/ 24 февраля 2020

Исходя из комментария @ Лютера, код, который вы используете во втором примере, должен работать.

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)

. В результате вы получите тот же результат, что и в первом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...