1 (2022-08-15 16:45:13 отредактировано swerg)

Тема: Особенности 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

2

Re: Особенности Lua 5.4

Напишите кто еще какие изменения заметил, будут добавлять всё в первый пост темы.

3 (2022-08-15 14:50:49 отредактировано s_mike)

Re: Особенности Lua 5.4

<const> и <clear>
Другая логика сборщика мусора
новые метаметоды (не знаю, может, они в еще 5.3 появились)

4

Re: Особенности Lua 5.4

s_mike пишет:

<const> и <clear>

Ух ты! Почитал - прикольно.

s_mike пишет:

Другая логика сборщика мусора

Это я отношу к внутренним потрошкам, которые по идее программиста заботить на должны (на мой взгляд). Лишь бы сборщик работал smile Это лишь мое мнение.