Создавать переменную при первом ее упоминании, и присваивать ей уникальный тип с уникальным значением - порождает геморрой по поиску опечаток значительно больший, чем явное декларирование переменных.
Если же треть функционала переваривает такие переменные на входе нормально, треть - приводит к краху системы, а треть - к "ушла совсем, но обещала когда-нибудь вернуться" - это едва-ли можно назвать гуманным.
Особую пикантность к "ленивому" подходу создает необходимость писать все конструкции вида y=f2(f1(x)) как:
local x1
if х then
x1=f1(x)
if x1 then y=f2(x1)
end
end
Ага, ушли от декларирования переменных, говорите ?