0

我已经搞砸了几个小时,我似乎无法让它工作

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

 frame:EnableMouseWheel(true)
end

我得到的错误是

尝试调用方法“EnableMouseWheel”(零值)

但如果我这样做

MyFrame1:EnableMouseWheel(true)

从来没有问题,它可以工作

无论如何使用变量作为方法的框架名称?

4

2 回答 2

1

这将起作用:

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

    vars[frame]:EnableMouseWheel(true)
end

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

于 2013-03-14T00:56:20.440 回答
0

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

_G["MyFrame1"]

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

getglobal("MyFrame1")

也就是说,这通常是一种反模式。如果您是最初定义 MyFrame 变量的人,通常最好使用数组来代替:

Myframes = {
   MyFrame1,
   MyFrame2,
}

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

local frame = MyFrames[i]
frame:EnableMouseWheel(true)
于 2013-03-14T00:56:39.113 回答