LUA表格字符串转对象

是否可以将对象中的键转换为对象? 我想简化这段代码:

这个可以工作:

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

点赞
用户9866482
用户9866482

问题似乎像局部变量一样使用关键字。请查看此帖子

我尝试了此代码段,它很好用。

storeFn = _G
storeFn.Gn = {} -- 限制循环迭代并避免出现错误
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 -- 重启原始的 _G

还可以使用 _G.Fn={},然后销毁 _G.Fn=nil

2018-05-30 03:19:04