Size: a a a

2019 July 31

IA

Ivan Azoyan in pro.lua
http://www.lua.org/work/doc/manual.html#3.3.5
There are two possible attributes: const, which declares a constant variable, that is, a variable that cannot be assigned to after its initialization; and toclose, which declares a to-be-closed variable
источник

D

Dr. One in pro.lua
А вот так. Да такая ошибка есть. А в новой версии нету ошибки.
источник

IA

Ivan Azoyan in pro.lua
Dr. One
А вот так. Да такая ошибка есть. А в новой версии нету ошибки.
но она меняется в новой версии?
источник

D

Dr. One in pro.lua
Да, меняется. Ошибки не возникает.
источник

IA

Ivan Azoyan in pro.lua
поэкспериментируй, может получится
источник

D

Dr. One in pro.lua
А, это короче надо делать не в интерпретаторе, а в коде в отдельном файле. Тогда переменная не меняется, ошибку пишет.
источник

IA

Ivan Azoyan in pro.lua
покажи чё пишет
источник

D

Dr. One in pro.lua
lua: test.lua:3: attempt to assign to const variable 'a'
источник

IA

Ivan Azoyan in pro.lua
прикольно)
источник

IA

Ivan Azoyan in pro.lua
Dr. One
lua: test.lua:3: attempt to assign to const variable 'a'
local <toclose> a = 34;
setmetatable( a,  { __close = function() print("a") end }
можешь вот это проверить?
источник

D

Dr. One in pro.lua
Скобку пропустил)

Вот что пишет:
lua: test.lua:2: bad argument #1 to 'setmetatable' (table expected, got number)
stack traceback:
       [C]: in function 'setmetatable'
       test.lua:2: in main chunk
       [C]: in ?
источник

IA

Ivan Azoyan in pro.lua
хм, ну зафигачь таблицу)
источник

IA

Ivan Azoyan in pro.lua
local <toclose> a = {};
setmetatable( a,  { __close = function() print("a") end })
источник

D

Dr. One in pro.lua
Ошибок нету, принт сработал.
источник

IA

Ivan Azoyan in pro.lua
теперь знаешь че сделай:
local <toclose> a = {};
setmetatable( a,  { __close = function() print("a") end })
setmetatable( a,  { __gc = function() print("gc a") end })
источник

IA

Ivan Azoyan in pro.lua
должно вывестись:
a
gc a
источник

D

Dr. One in pro.lua
Первый принт не сработал, ошибка: attempt to close non-closable variable 'a'
Второй принт сработал.

toclose что означает?
источник

IA

Ivan Azoyan in pro.lua
Here, to close a value means to call its __close metamethod.
https://www.lua.org/work/doc/manual.html#3.3.8
источник

IA

Ivan Azoyan in pro.lua
ща мы починим
источник

IA

Ivan Azoyan in pro.lua
mt = {}

mt.__close = function() print("close a") end
mt.__gc = function() print("gc a") end

local <toclose> a = {}
setmetatable(a, mt)
источник