Jump to content
Alloder.pro  about Allods with love 😱
Search In
  • More options...
Find results that contain...
Find results in...

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

Digest April

We talk about what was done and updated in the past month. We help keep abreast of events.

Read more

Game tooltips

Tooltips provide a way for 3rd party fansites and extensions to display detailed information on mouseover.

Read more

Как проверить существует ли переменная


jedbez
 Share

Recommended Posts

Есть переменная BD находящаяся во внешнем файле, её возможно могут удалить. Как проверить существует ли она, объявлена ли?

Link to comment
Share on other sites

Вот именно, а проверить её существовани

 

if BD == nil then

return

else

 

end

? так не работает?

 

И к бабке ходить не надо (читай: запускать аллоды), получим:

Attempt to read from undeclared global variable: BD

 

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

Link to comment
Share on other sites

По теме.

Если нужно проверить глобальную переменную:

Есть такая табличка _G, либо есть табличка, которую возвратит нам getfenv(0), поиском по данной таблице (не нужно, думаю, рассказывать, как реализовать) и найдем, есть ли такая переменная или нет.

 

Если нужно проверить локальную переменную:

Помним, что локальные переменные имеют приоритет над глобальными, соответственно, способ "в лоб":

local DB = 100;
--some code here
Global("DB", -1)
if DB != -1 then
--var is declared locally
else
--undeclared
end

С другой стороны, её ведь могут не только удалить, но изменить значение, тип, итд. Проверки не помешают. 

 

Если ты про чтение настроек, то я делал чтение через pcall - dofile в отдельное глобальное окружение, а потом при наличии глобальной переменной копировал в локальную переменную её содержание.

Link to comment
Share on other sites

Вот именно, а проверить её существовани

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

 

Если это не значение энума, заведенное разработчиками, то: 

rawget( _G, "var_name" ) ~= nil
Link to comment
Share on other sites

Если ты про чтение настроек, то я делал чтение через pcall - dofile в отдельное глобальное окружение, а потом при наличии глобальной переменной копировал в локальную переменную её содержание.

т.е.

if not pcall( dofile, "../data/Mods/Addons/MyAddon/DBase.lua" ) then return end

изящное решение, мне понравилось...

и потом? 

local cBD={}

for i=1,geTableSize(BD)do

  cBD={BD.NAME,BD.CENA}

end

 

 

Хотя все равно BD может не существовать и опять ругнется :(

Link to comment
Share on other sites

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use