Строка таблицы LUA для obj - PullRequest
0 голосов
/ 28 мая 2018

Можно ли конвертировать ключ в объект?Я хотел бы упростить этот код:

Это работает:

for key, data in pairs(DBButtonOptions[self.value]) do
    if key == "widgetframe1" then
        widgetframe1:SetText(data)
        widgetframe1:SetDisabled(enable)
    elseif key == "widgetframe2" then
        widgetframe2:SetText(data)
        widgetframe2:SetDisabled(enable)
    elseif key == "widgetframe3" then
        widgetframe3:SetText(data)
        widgetframe3:SetDisabled(enable)
    elseif key == "widgetframe4" then
        widgetframe4:SetText(data)
        widgetframe4:SetDisabled(enable)
    elseif key == "widgetframe5" then
        widgetframe5:SetText(data)
        widgetframe5:SetDisabled(enable)
    end
end

Это работает не работа:

for key, data in pairs(DBButtonOptions[self.value]) do
    key:SetText(data)
    key:SetDisabled(enable)
end

Это работает, но ошибка(Попытка индексировать локальный ключ):

for key, data in pairs(DBButtonOptions[self.value]) do local key = _G[key] key:SetText(data) key:SetDisabled(enable) end

1 Ответ

0 голосов
/ 30 мая 2018

Проблема, кажется, принимает ключ как локальную переменную.проверьте это сообщение

Я попробовал этот фрагмент, и он отлично работает

storeFn = _G
storeFn.Gn = {} -- limit iteration of loop "for" and don't get errors
storeFn.Gn.first = function(val) print("test first! "..val) end
storeFn.Gn.second= function(val) print("test second! "..val) end

for k, v in pairs(storeFn.Gn) do
     print( assert (loadstring('return '..'storeFn.Gn.'..k..'(...)')) (math.random()) )
end

Только будьте осторожны с утечками памяти

storeFn.Gn = nil
for k,_ in pairs(storeFn) do print(k) end -- restart to original _G

Также можноиспользуйте _G.Fn={} и после уничтожьте его _G.Fn=nil

...