2013-03-14 5 views
0

Я баловаться с этим в течение нескольких часов, и я не могу показаться, чтобы получить эту работуWoW Addon (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) 

нет никаких проблем, что так когда-либо, и она работает

есть в любом случае использовать переменную в качестве имени фрейма для метода?

+0

К сожалению, я забыл добавить это не для клиент 5.x, возможно, с тех пор произошли изменения. это для патча World of Warcraft 2.4.3 –

ответ

1

Это будет работать:

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

    vars[frame]:EnableMouseWheel(true) 
end 

Хотя вы, кажется, ищет решения проблемы неправильной. Почему бы не сохранить их в массиве для начала?

+0

Спасибо большое! –

0

Если вы хотите, чтобы преобразовать имя строки в имени переменной вам необходимо получить доступ к глобальному объекту в виде таблицы:

_G["MyFrame1"] 

Я не знаю, о какой версии Lua варкрафт использует. Если его действительно старая версия, которая не имеет _G, то вы, вероятно, необходимо использовать getglobal функции вместо

getglobal("MyFrame1") 

Тем не менее, это, как правило, антипаттерн. Если вы один, что первоначально определены переменные MyFrame его обычно лучше использовать массив вместо:

Myframes = { 
    MyFrame1, 
    MyFrame2, 
} 

, так как это позволяет вам избежать манипулирования строками

local frame = MyFrames[i] 
frame:EnableMouseWheel(true) 
Смежные вопросы