WoW Addon(Lua)变量和方法

时间:2013-03-14 00:48:52

标签: 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)

什么都没有问题,并且它有效

无论如何

是否使用变量作为方法的框架名称?

2 个答案:

答案 0 :(得分:1)

这将有效:

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

    vars[frame]:EnableMouseWheel(true)
end

虽然您似乎正在寻找解决错误问题的方法。为什么不将它们存储在数组中呢?

答案 1 :(得分:0)

如果要将字符串名称转换为变量名称,则需要以表格形式访问全局对象:

_G["MyFrame1"]

我不知道Lua warcraft使用的版本。如果它是一个没有_G的旧版本,那么你可能需要使用getglobal函数

getglobal("MyFrame1")

那就是说,这通常是反模式。如果您是最初定义MyFrame变量的人,那么通常更好地使用数组:

Myframes = {
   MyFrame1,
   MyFrame2,
}

因为这可以避免字符串操作

local frame = MyFrames[i]
frame:EnableMouseWheel(true)