LINUX.ORG.RU

История изменений

Исправление AKonia, (текущая версия) :

Единственное что смущает лично меня, так, что то, что как постоянные, так и закрываемые переменные должны через аттрибуты объявлятся в таком виде:

do
  local v <const> = "Hello World"
end
-- close это по сути завершатель, что выполняется после выхода из облсти видимости,
--   как по мне это почти деструктор, с той разницей, что деструктор это всё-таки close + gc,
--   но теперь в ООП появляется по сути нормальный деструктор в котором можно чистить пользовательские объекты
--   из Си-интерфейса
 local v <close> = setmetatable({}, {__close = function() print("Двери закрываются") end})
end

-- ИМХО лучше было сделать:
const v = ...
close v = ...

Исправление AKonia, :

Единственное что смущает лично меня, так, что то, что как постоянные, так и закрываемые переменные должны через аттрибуты объявлятся в таком виде:

do
  local v <const> = "Hello World"
end

-- close это по сути завершатель, что выполняется после выхода из облсти видимости,
--   как по мне это почти деструктор, с той разницей, что деструктор это всё-таки close + gc,
--   но теперь в ООП появляется по сути нормальный деструктор в котором можно чистить пользовательские объекты
--   из Си-интерфейса


 local v <close> = setmetatable({}, {__close = function() print("Двери закрываются") end})
end

-- ИМХО лучше было сделать:
const v = ...
close v = ...

Исходная версия AKonia, :

Единственное что смущает лично меня, так, что то, что как постоянные, так и закрываемые переменные должны через аттрибуты объявлятся в таком виде:

do
  local v <const> = "Hello World"
end

-- close это по сути завершатель, что выполняется после выхода из облсти видимости,
--   как по мне это почти деструктор, с той разницей, что деструктор это всё-таки close + gc,
--   но теперь в ООП появляется по сути нормальный деструктор в котором можно чистить пользовательские объекты
--   из Си-интерфейса

 local v <close> = setmetatable({}, {__close = function() print("Двери закрываются") end})
end