Удаление переменных

Страницы: 1
RSS
Удаление переменных
 
Возможно ли в lua удалить все переменные ,
что бы они в какой то момент все стали nil
что бы не прописывать их все вручную
 
Смотря какие переменные и из какой области видимости... Для примера, локальные переменные можно сбросить такой вот глобальной функцией:
Код
function clear_locals()
    local l = 1 while debug.getlocal(2, l) do debug.setlocal(2, l, nil) l = l+1 end
end

local a = 5
local b = 10
local c = 15
print(a, b, c)
clear_locals()
print(a, b, c)
Вывод:
Код
5       10      15
nil     nil     nil
 
Цитата
Suntor написал:
локальные переменные можно сбросить такой вот глобальной функцией:
Спасибо огромное !
----------------------------
А если не локальные,то можно как нибудь сбросить?
например: есть цикл, в нем много переменных ,но какие то переменные я забыл объявить локальными и на выходе мне надо их сбросить

Небольшой пример
Код
for i = 1,100 do
     
   local a = 5 
         b = 10
    local c = 10 + a
         d = 10 + b
   local e = 10 + c
         f = a + e
        g = f + a
   local h = b * 4     
    
    print(i..')'..'\n',a,b,c,d,e,f,g,h)
   
   if i == 10 then break end
end
print('И здесь надо что бы все переменные стали nil') 
 
Цитата
Archie_ написал:
А если не локальные,то можно как нибудь сбросить?
Если это глобальные переменные и они не были объявлены заранее до указанного блока кода, то можно. Сохранив содержимое глобальной таблицы _G в отдельную переменную перед блоком, а после блока сравнив _G с сохранённой таблицей и обнулив все переменные появившиеся в _G.
 
Цитата
Suntor написал:
Если это глобальные переменные и они не были объявлены заранее до указанного блока кода, то можно.

Да, до указанного блока они  не были объявлены

Цитата
Suntor написал:
Сохранив содержимое глобальной таблицы _G в отдельную переменную перед блоком

А можно небольшой пример!?
 
Цитата
Archie_ написал:
А можно небольшой пример!?
Сброс глобальных переменных объявляемых внутри блока:
Код
function save_globals()
    old_G = {} for k, v in pairs(_G) do old_G[k]=v end
end

function clear_globals()
    for k, v in pairs(_G) do if not old_G[k] then _G[k]=nil end end
end

save_globals()
a, b, c = 5, 10, 15
print(a, b, c)
clear_globals()
print(a, b, c)
Вывод:
Код
5       10      15
nil     nil     nil

Можно также решить задачу со сбросом глобальных переменных объявленных до блока, но код будет сложнее, с подменой _G через setfenv и метометодами.
 
Самый простой путь -это поместить все глобальные переменные в единую таблицу и в нужный момент сделать её пустой простым присвоением.  
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
Страницы: 1
Читают тему
Наверх