Конечно, нет ничего плохого в коде, который вы разместили.Однако в интерактивной среде это может показаться странным, в зависимости от того, как фрагменты собираются и передаются анализатору.
Как написано, вы объявляете локальный tempArray
и затем, очевидно, используете его.Если эти строки введены в интерактивном приглашении Lua, которое принимает каждую строку как отдельный чанк, то локальное, созданное в первой строке, будет создано и отброшено.Вторая строка создаст глобальную переменную с тем же именем, а третья строка будет использовать глобальную переменную для установки поля.Вы можете продемонстрировать это следующим образом:
C:\Users\Ross>lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> local tempArray
> tempArray = {}
> tempArray["Some String"] = true
>
> table.foreach(tempArray,print)
Some String true
>
> print(type(_G.tempArray))
table
>
Здесь я продемонстрировал, что таблица tempArray
существует и имеет ровно один ключ со значением true
.Напечатав тип _G.tempArray
, я продемонстрировал, что была создана глобальная переменная.
Используя пару do
... end
, чтобы интерактивное приглашение обрабатывало весь блок какодин кусок, мы оба создаем и используем локальную переменную.К сожалению, после end
фрагмента, локальный теперь выходит из области видимости и больше не виден.
C:\Users\Ross>lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> do
>> local tempArray
>> tempArray = {}
>> tempArray["Some String"] = true
>> end
> print(type(_G.tempArray))
nil
> table.foreach(tempArray,print)
stdin:1: bad argument #1 to 'foreach' (table expected, got nil)
stack traceback:
[C]: in function 'foreach'
stdin:1: in main chunk
[C]: ?
>
Я не знаю достаточно о WoW, чтобы говорить с властью, но этовполне вероятно, что у локальных пользователей, объявленных в скрипте, могут возникнуть интересные проблемы с видимостью и сохранением значения.Если они используют значительное количество изолированных сценариев, даже глобальные переменные в сценарии могут не отображаться другими сценариями.