Stas
Увидел.
Snusmumriken
Прошлое удалено.
Stas
Прошлое удалено.
Подвод увидел. Мне хватило
Stas
Хочешь фулл?
Не-а. У меня есть кое-что получше. Скрин бага
Stas
У меня нет дампа. У меня есть скрин дампа....
LISP
Anatoliy
Всем привет, ребята возник вопрос помогите
Anatoliy
редко пользуюсь анонимными функциями и уже забыл когда в последний раз ими пользовался
Anatoliy
вроде бы все просто, но неполучается
Anatoliy
Вот такой код например:
Anatoliy
for i=1,10 do x= (function(i) return i+i end) print(x) end
Anatoliy
вроде все правильно но результат выполнения:
Anatoliy
function: 0x0031b800 function: 0x0031ba88 function: 0x0031baf0 function: 0x0031bb58 function: 0x00311bf8 function: 0x00311c60 function: 0x00311cc8 function: 0x0031bfe0 function: 0x0031c048 function: 0x0031c0b0 Программа завершена за 0.06 секунд (pid: 624).
print(x(какое-то число))?
Anatoliy
т.е. возвращается не резьтат выполнения анонимной функции а ссылка на саму функцию
Не понятно, у тебя i в цикле и аргументом в функции.
Джюс
for i=1,10 do x= (function(i) return i+i end) print(x) end
так ты функцию вызови
Anatoliy
print(x(какое-то число))?
а да так сработало, все понял, короче x я присвоил функцию а не результат выполнения анонимной функции ))
Anatoliy
А как ей присвоить результат выполнения анонимной функции сразу?
Точно так же, как вызвал до этого.
Anatoliy
Точно так же, как вызвал до этого.
через промежуточную переменную получается
Джюс
(function() return 1 end)()
Джюс
оно сразу вернет 1
Anatoliy
Спасибо!
Snusmumriken
Спасибо!
Зачем тебе лямбдо-замыкания понадобились-то?
Snusmumriken
Это прост довольно специфичный инструмент, которым не стоит злоупотреблять, как это делают js-ники ))
Hello, World! 🎄
(function() return 1 end)()
А зачем так функцию закрывать?
Snusmumriken
Если сохранять в переменную, скобки вокруг функции не нужны. А если её сразу и вызвать — то сама лямбда не нужна.
Джюс
А зачем так функцию закрывать?
потому что если её сразу вызывать, то без скобок ниче не выйдет
Artem
всем привет, как можно конвертировать строку в lua в кодировку utf16?
Snusmumriken
iconv
Snusmumriken
Да, "строк lua" не существует, это просто байты которые ты интерпретируешь как тебе нужно, они уже имеют какую-то кодировку, в зависимости от содержимого файла который ты прочитал, или кодировки скрипта или ещё чего. Скажем так, кодировка есть у любого текста.
Snusmumriken
В третьих, зачем? Возможно есть более простые пути. utf16 активно используется в виндовсе, но там есть и utf8-варианты функций, можно вызывать их и не париться с кодировками, используя стандартный utf8.
Artem
вообщем надо отправить по smpp протоколу, если отправлять в utf8 - приходять только символы типа пробела и пунктуации
Artem
при перекодировки в utf16 через iconv пришла вообще хрень делал вот так: local convert = iconv.new('UTF-16LE', 'UTF-8') convert:iconv("текст сообщения")
Snusmumriken
Ну кстати можешь попробовать с utf8 https://ru.wikipedia.org/wiki/SMPP
Anonymous
Потому что он малолетний малазиец, который пытается шифровать чужие читы для gameguardian и перепродавать.
Аяяй)) Тоже сталкивался с тем что мои скрипты перепродавали, пришлось сервер поднимать и шпиЙонить активность 😁
anton
подскажите, порядок элементов при вызове pairs(...) неопределен?
Джюс
но вообще да
Luсky
но это нестрашно
Luсky
ибо ваистену можно получить список ключей
Luсky
отсортировать их
Luсky
в нужном порядке
Luсky
идабудит так
Джюс
ipairs() есть же
Snusmumriken
подскажите, порядок элементов при вызове pairs(...) неопределен?
Если тебе нужен порядок — сохрани его где-нибудь. Или используй итераторы типа: function orderpairs(tbl, func) local keys = {} for k, v in pairs(tbl) do keys[#keys + 1] = k end table.sort(keys, func) -- без функции будет алфавитный порядок local i = 0 return function() i = i + 1 local k = keys[i] local v = tbl[k] if k then return i, k, v end end end А потом такой гордый: for i, k, v in orderpairs(tbl) do print(k, v) end
Anonymous
Парни, подскажите пожалуйста такой момент
Anonymous
Имею матрицу вида: subData[1].nums = { {{877,884,1}},{{751,756,1}},{{757,762,1}},{{686,693,1}},{{1134,1139, 1}},{{445,450, 1}},{{885,890, 1}},{{765,770, 1}},{{771,776, 1}},{{891,896, 1},{903,904, 1},{1192,1192, 1}},{{897,902, 1}},{{510,517, 1}},{{1149,1157, 1}},{{790,797, 1}},{{798,803, 1},{908,910, 1},{915,917, 1}},{{920,944, 1}},{{945,962, 1}},{{963,972, 1}},{{973,982, 1}},{{983,992, 1}},{{993,1002, 1}},{{1003,1011, 1}},{{1012,1020, 1}},{{1021,1029, 1}},{{1030,1038, 1}} }
Anonymous
Надо обойти ее циклом изменив цифры в зависимости от диапазона
Anonymous
Я сделал так
Anonymous
for a=1,#subData do for b=1,#subData[a].nums do for c = 1,#subData[a].nums[b] do local x = subData[a].nums[b][c][1] if x>=677 and x <= 860 then local n = 3 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=860 and x <= 920 then local n=4 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=920 and x <= 1039 then local n=5 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=1039 and x <= 1061 then local n = 21 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=1061 and x <= 1346 then local n = 24 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=1346 and x <= 1382 then local n = 33 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] end end end end
Anonymous
И как мне теперь записать в виде строки изменённую матрицу с сохранением синтаксиса?
Anonymous
Т.е. что бы была в формате : subData[1].nums = { {{877,884,1}},{{751,756,1}},{{757,762,1}} ..... Бла бла бла
Anonymous
Чёт туплю немного 🤷‍♂
Snusmumriken
serpent.dump(mymatrix) https://github.com/pkulchenko/serpent
Luсky
обмажь код тройными апострофами, которые на клавише с буквой ё
Luсky
а лучше на сает для кода кидай типа пастебин или ещё сотни их
Snusmumriken
for a=1,#subData do for b=1,#subData[a].nums do for c = 1,#subData[a].nums[b] do local x = subData[a].nums[b][c][1] if x>=677 and x <= 860 then local n = 3 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=860 and x <= 920 then local n=4 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=920 and x <= 1039 then local n=5 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=1039 and x <= 1061 then local n = 21 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=1061 and x <= 1346 then local n = 24 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] elseif x>=1346 and x <= 1382 then local n = 33 subData[a].nums[b][c][1] = subData[a].nums[b][c][1]+n subData[a].nums[b][c][1] = subData[a].nums[b][c][2]+n subData[a].nums[b][c][3] = subData[a].nums[b][c][3] end end end end
Ещё есть одна штучка. Таблицы это ссылки. local nums = subData[a].nums nums[b][c][1] = nums[b][c][1] + n Всё, ты изменил subData[a].nums.[b][c][1], но гораздо короче.
Anonymous
Спасибо большое, уже решил
Anonymous
Косо криво пока, но результат то что надо
Anonymous
Может кому пригодится, нашел на просторах инета.
Anonymous
function table.save(tbl,file) -- recursively saves table data to a file, human-readable and indented -- supported types: number, string, boolean, tables of the same local f,err = io.open(file,"w") if err then print("Error: Unable to open file for writing: "..file.."\nDetails: "..err) return end local indent = 1 -- local functions to make things easier local function exportstring(s) s=string.format("%q",s) s=s:gsub("\\\n","\\n") s=s:gsub("\r","") s=s:gsub(string.char(26),""..string.char(26).."") return s end local function serialize(o) if type(o) == "number" then f:write(o) elseif type(o) == "boolean" then if o then f:write("true") else f:write("false") end elseif type(o) == "string" then f:write(exportstring(o)) elseif type(o) == "table" then f:write("{\n") indent = indent + 1 local tab = "" for i=1,indent do tab = tab .. " " end for k,v in pairs(o) do f:write(tab .. "[") serialize(k) f:write("] = ") serialize(v) f:write(",\n") end indent = indent - 1 tab = "" for i=1,indent do tab = tab .. " " end f:write(tab .. "}") else print("unable to serialzie data: " .. tostring(o)) f:write("nil, -- ***ERROR: unsupported data type!***") end end -- here's the actual save process f:write("return {\n") for k,v in pairs(tbl) do f:write(" [") serialize(k) f:write("] = ") serialize(v) f:write(",\n") end f:write("}") f:close() end function table.load(file) local data,err = loadfile(file) if err then return nil,err else return data() end end
Anonymous
Я для своих нужд немного правил, косо криво пока, но то что надо было срочно сделать, сделал, но в целом вот оригинал .
Hello, World! 🎄
@Snusmumriken
Arslan
@Snusmumriken
Тссс..! Пускай спит, выходные же
Eduard
обязан ли я после lua_call чистить стек (lua_pop)? или след вызов lua_call сам это сделает?
Eduard
в доке не вижу https://www.lua.org/manual/5.3/manual.html#lua_call
Snusmumriken
lua_call помнится очищает и функцию и аргументы, внутри должны оставаться только возвращённые аргументы из вызванной функции. То что было над функцией остаётся.
Eduard
Внутри? Где внутри? Грубо говоря, lua_call положит на стек столько возвращаемых значений, сколько я попрошу (если функция ничего не вернула, когда должна была, то положит NILы). И вопрос такой: нужно ли мое стек от этих NILов чистить? Или я могу просто проверить, что если на стеке не то, что мне нужно (lua_isnumber, например), то просто забить?
Eduard
И следущий lua_call этой же функции все подчистит