S
Size: a a a
S
S
S
S
LO
L
S
function foo(filename)
local file = io.open(filename)
-- вызовется в любом случае
-- при выходе из функции
-- соотв. файл всегда будет закрыт
-- автоматически
-- и таких штук может быть много в одной функции
-- и вызываться они будут в обратном порядке объявления
scope(exit) do file:close() end
if not something then
-- автоматический // file:close()
-- перед ретурном
return "everything is bad"
end
scope(exit) do print("Cool") end
-- автоматические // print("Cool"); file:close()
-- перед ретурном
return "everything is great"
end
S
S
Main() {
auto gl = InitOpenGL()
scope(exit) CloseOpenGL(gl);
auto win = InitWindow(gl);
scope(exit) CloseWindow(win);
...
}
Совершенно офигенски, особенно если учесть что в куче случаев там может что-то непроинициализироваться, но всё корректно завершится в правильном порядке. Не надо это прописывать в каждом стейте.S
MT
LL
LL
LL