Adapa
А вот так. Да такая ошибка есть. А в новой версии нету ошибки.
Ivan
Adapa
Да, меняется. Ошибки не возникает.
Ivan
поэкспериментируй, может получится
Adapa
А, это короче надо делать не в интерпретаторе, а в коде в отдельном файле. Тогда переменная не меняется, ошибку пишет.
Ivan
покажи чё пишет
Adapa
lua: test.lua:3: attempt to assign to const variable 'a'
Ivan
прикольно)
Adapa
Скобку пропустил)
Вот что пишет:
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 ?
Ivan
хм, ну зафигачь таблицу)
Ivan
local <toclose> a = {};
setmetatable( a, { __close = function() print("a") end })
Adapa
Ошибок нету, принт сработал.
Ivan
теперь знаешь че сделай:
local <toclose> a = {};
setmetatable( a, { __close = function() print("a") end })
setmetatable( a, { __gc = function() print("gc a") end })
Ivan
должно вывестись:
a
gc a
Adapa
Первый принт не сработал, ошибка: attempt to close non-closable variable 'a'
Второй принт сработал.
toclose что означает?
Ivan
Here, to close a value means to call its __close metamethod.
https://www.lua.org/work/doc/manual.html#3.3.8
Ivan
ща мы починим
Ivan
mt = {}
mt.__close = function() print("close a") end
mt.__gc = function() print("gc a") end
local <toclose> a = {}
setmetatable(a, mt)
Ivan
типа деструктор
mihacooper [МСК -2]
очень фиговый деструктор
mihacooper [МСК -2]
т.к. опциональный
Ivan
потом проведи такой эксперимент:
mt = {}
mt.__close = function() print("close a") end
mt.__gc = function() print("gc a") end
local <toclose> a = {}
setmetatable(a, mt)
a = nil
Должно быть наоборот:
gc a
close a
Adapa
Так, ошибок нет. "gc a" высветилось.
Ivan
только gc a?
Adapa
ага
Ivan
оу, я ошибся
Ivan
local <toclose> a = {}
Ivan
вот это исправь
Adapa
Хорошо сработало, без ошибок. Что это за колдунство?
Ivan
а что вывелось? ответь на нужное сообщение выводом
Adapa
Всё. Все два принта.
Ivan
последний эксперимент
Ivan
потом будем экспериментировать дальше:
function foo()
mt = {}
mt.__close = function() print("close a") end
mt.__gc = function() print("gc a") end
local <toclose> a = {}
setmetatable(a, mt)
return a
end
local d = foo()
print("======")
Должно быть:
close a
=======
gc a
Adapa
Верно.
Ivan
колдунства никакого нет, вызов __close() возникает, когда переменная выходит из области видимости, в данном случае при выходе из функции
Ivan
но сборка мусора не произошла, поэтому не вызвался метод __gc() Она произойдёт в конце программы
Adapa
Теперь более менее понятно что ты делал.
Ivan
вроде таблица ещё жива __gc() не сработал, а __close() сработал
Lucky
подскажите, можно ли к таблице применить несколько методов подряд?
Lucky
типа mytable{}:metod1(), metod2()
Lucky
или как-то ещё?
Ivan
Он появится в новой версии. Я думаю, его нужно использовать, когда отключаешь сборщик мусора
Lucky
Спасибо! mytable{}:metod1(): metod2() сработало
Pavel
Pavel
Вот ссылка на статью. Мало ли
Mark ☢️
Lucky
жінка не чоловік
Pavel
Pavel
Даже 51%% даст 2
Anonymous
Anonymous
ну так если так рассуждать то женского населения боьлше чем мужскоо (Китай исключение)
Serezha
Исследование норм и дает хорошее представление для коррекции ожиданий
🐅🤦♂️
Anonymous
Фулстек-разработчик в наши дни означает примерно следующее:
— Собирать фронт.
— Прогать бэк.
— Поднимать сервер.
— Писать на Хабр.
— Записывать подкаст.
— Анимировать ролик для Pixar.
— Готовить яичницу одной рукой.
— Делать всё это одновременно.
Mark ☢️
Pavel
Pavel
Pavel
75%% это значение на 3/4 отрещка
Serezha
фу-стек разработчик. реакт редукс вебпак бабел нода и вот это вот все
Pavel
Anonymous
Anonymous
я как бы сам веб по тому и спрашиваю что не знаю как в других сферах дела обстаят
Pavel
vvzvlad
...но очень интересно
Yuriy
всем ку
помогие с паттерном
нужно найти в строке слово aaa ИЛИ bbb
Yuriy
думал должно быть что то в духе s:match("[(aaa)(bbb)]")
Anonymous
Есть же палка
Anonymous
Ор в регекспах
Anonymous
Вот не знаю есть ли в луа паттернах такое
Anonymous
А обычная палка гуглится по запросу регексп ор