魔兽世界插件(Lua)变量和方法

我一直在搞这个问题几个小时了,但是似乎无法让它起作用:

for i=1, 10 do
 local frame = "MyFrame"..i

 frame:EnableMouseWheel(true)
end

我所得到的错误是:

attempt to call method 'EnableMouseWheel' (a nil value)

但如果我这样做:

MyFrame1:EnableMouseWheel(true)

就没有任何问题,它可以正常使用。

有没有办法使用变量作为帧名称的方法?

点赞
用户102441
用户102441

这样做就可以了:

local vars = getfenv()
for i=1, 10 do
    local frame = "MyFrame"..i

    vars[frame]:EnableMouseWheel(true)
end

尽管您似乎在寻找解决错误问题的解决方案,但为什么不一开始就将它们存储在数组中呢?

2013-03-14 00:56:20
用户90511
用户90511

如果你想将一个字符串变成一个变量名,你需要把全局对象作为一个表来访问:

_G["MyFrame1"]

我不知道魔兽世界使用的 Lua 版本是什么,如果是一个非常旧的版本没有_G,那么你可能需要使用getglobal函数:

getglobal("MyFrame1")

话虽如此,这通常是一个反模式。如果你是最初定义MyFrame变量的人,更好的方法是使用一个数组:

Myframes = {
   MyFrame1,
   MyFrame2,
}

因为这样可以避免使用字符串操作:

local frame = MyFrames[i]
frame:EnableMouseWheel(true)
2013-03-14 00:56:39