Тема: Особенности Lua 5.4
В Lua версии 5.4 появились некоторые отличия от Lua 5.1 и 5.2.
В этой теме предлагаю собрать все неожиданные изменения синтаксиса / функций. Речь именно про особенности Lua-интерпретатора, не связанных с версиями терминала QUIK.
1. В Lua 5.3 появились [url=https://quik2dde.ru/viewtopic.php?id=370]встроенные битовые операции[/url], заменяющие библиотеку bit.
2. unpack() --> table.unpack() (неожиданно, Lua 5.4)
3. Константные локальные переменные <const> (Lua 5.4)
Атрибут доступен только для локальных переменных.
local a <const> = 5
a = 8 -- здесь будет ошибка "attempt to assign to const variable 'a'"
4. Автоматически "закрываемые" переменные (To-be-closed Variables) (Lua 5.4)
При объявлении переменной с атрибутом <close> после покидании блока, где она объявлена, для неё будет автоматически вызван метаметод __close. Причем вызовется он как при нормальном ходе программы, так и при ошибке. Т.е. мы получили этакие штатные "деструкторы".
function f()
local t <close> = setmetatable({ 1, 2, 3 }, {
__close = function(x)
print("__close")
end
})
end
print(1)
f()
print(2)
Напечатает:
1
__close
2
В качестве параметра в __close передается значение таблицы.
Если метаметода __close нет, то будет выдана ошибка:
local r <close> = {} -- variable 'r' got a non-closable value