Anonymous
Всем привет. Вопрос не в этв ветку конечно, но тут много грамотных людей, может кто вощьмется... Есть такая вот задача, все подробно расписал: https://yadi.sk/i/2gp9lz6o1b142w Может у кого есть желание взяться, за результат отблагодарю НОВЫМ 7 айфоном, или деньгами.
Pavel
Всем привет. Вопрос не в этв ветку конечно, но тут много грамотных людей, может кто вощьмется... Есть такая вот задача, все подробно расписал: https://yadi.sk/i/2gp9lz6o1b142w Может у кого есть желание взяться, за результат отблагодарю НОВЫМ 7 айфоном, или деньгами.
если я правильно понял - то дебаг-меню работает только на сборках смотрящих в тестовые серваки. с огромной долей вероятности - команды дебаг-меню на продакшн будут реджектится самим серваком играть же на тестовом серваке - не особенно полезно 1. на нем мало народу 2. из-за первого пункта вас достаточно быстро вычислят и забанят 3. весь народ - в среднем тестировщики. и они не играют в обычном смысле
Pavel
В сборках игр, в которых я участвовал, тоже было дебаг меню. которое работало ИСКЛЮЧИТЕЛЬНО на тестовых серваках. в проде просто вырезался код с сервера. а баблишко, опыт И так далее в проде накидывались через отправку бонусов.
Sasha
Всем привет. Подскажите, глобальные переменные хранятся в _G таблице. В каком месте хранятся локальные переменные?
Snusmumriken
Всем привет. Подскажите, глобальные переменные хранятся в _G таблице. В каком месте хранятся локальные переменные?
Весьма глубоко )) Просто так не достанешь, но гипотетически можно через debug.getupvalue.
Snusmumriken
А зачем тебе? Дебаггер пишешь?
Sasha
А зачем тебе? Дебаггер пишешь?
Хочу для себя разобраться в данном вопросе)
Igor
Ну а если понадобится дебаггер вдруг, то что-то лучше, чем mobdebug ещё не завезли (Ну, это если не учитывать io.write и print, хех)
Snusmumriken
Кароч, локальные переменные на то и локальные, чтобы не светиться направо-налево )) Но дебажной либой на продакшне лучше не пользоваться. Во-первых, это дебажная либа, во-вторых она не самая быстрая и там могут быть некоторые просадки в странных местах.
Sasha
a=5 print(_G.a) function test() local b=7 local c=8 print(_L.b) print(_L.c) end test() Что-то типа такого можно как-то записать?)
Igor
Неа
Igor
В getupvalue система похитрее, почитай в мануале, а то долго расписывать
Snusmumriken
a=5 print(_G.a) function test() local b=7 local c=8 print(_L.b) print(_L.c) end test() Что-то типа такого можно как-то записать?)
Понимаешь ли в чём фигня. Делать отдельную таблицу на каждый скоуп — довольно дорого. Поэтому там оптимизационная фигня.
Sasha
Понимаешь ли в чём фигня. Делать отдельную таблицу на каждый скоуп — довольно дорого. Поэтому там оптимизационная фигня.
Понимаю. Но где-то же они хранятся? Наверное тоже в таблице, но имя которой нам не известно, типа _LocalTEMPxx879, так наверное?)
Sasha
которая сама удаляется после выхода из блока
Igor
Нет, под локальные используется только сишная фигня
Snusmumriken
Нет, не в таблицах а в специальных прицепленных к функциям структурах, где ошиваются замыкания и как раз локальные переменные. Функция — составная штука.
Igor
В Lua они торчат только через прослойку в виде дебаггера
Sasha
О
Sasha
Ничего не понял, но очень интересно
Sasha
😂
Igor
Говорю же, ман почитай, так даже легче будет
Sasha
Но в целом понял, что так просто как _G их не получить, так что спасибо, ребят)
Igor
Там всё понятно расписано о том, как работают локальные переменные
Igor
И машина Lua в целом
Sasha
Спасибо
Igor
Всегда пожалуйста
Snusmumriken
Хмм, надо таки разобраться в дебажной либе. Потому что оно кажись смотрит именно что в замыкания а не в локальные переменные.
Highly Likely
Чекни гайд luaimplementation5.0
Highly Likely
Там емнип об этом говорится
Anonymous
В сборках игр, в которых я участвовал, тоже было дебаг меню. которое работало ИСКЛЮЧИТЕЛЬНО на тестовых серваках. в проде просто вырезался код с сервера. а баблишко, опыт И так далее в проде накидывались через отправку бонусов.
Я писал в задании, перенастроить на обычный сервер дело пары минут. старая версия у меня там работает отлично второй год, но в ней нет большей части актуального функционала.
аннлн
ну, баян про два стула же.
Snusmumriken
А
аннлн
на одном негарантированный порядок точённый...
аннлн
кто-то совсем недавно надо мной смеялся за мой способ получения value без pairs
аннлн
select(2, next(tbl))
Snusmumriken
Имхо селект лишний, просто local _, first = next(tbl) А селектом во-первых, мало кто умеет пользоваться, во-вторых он перегружает вид.
аннлн
не люблю я _
Snusmumriken
Цена отсутствия селекта )0
аннлн
я тут luv расковырял
аннлн
сижу тащусь
Snusmumriken
Который luvit?
аннлн
нет
аннлн
ну, точнее, да
Snusmumriken
Который Luvit без it?
аннлн
именно
Snusmumriken
Да, оно смешнявое
аннлн
почему смешнявое?
аннлн
всё ну даже слишком серьёзно
Snusmumriken
Ну вот я и говорю, смешнявое
аннлн
прикладное байтоърочерство это иногда весело
аннлн
и быстро
Snusmumriken
Меня упарывает упорное string.find(str, "foo") вместо str:find("foo"). Длиннее же гораздо, плюс время на lookup таблицы string.
аннлн
ну так корректнее чуть
аннлн
мне тоже нравятся:вот_эти_штуки, но увы
аннлн
ну и в 2к20 году текстовые редакторы с автокомплитом вроде даже подвезли
Snusmumriken
Автокомплит помогает при написании, но нифига не помогает при прочтении ))
аннлн
> s = 123 > s:find(1) stdin:1: attempt to index global 's' (a number value) stack traceback: stdin:1: in main chunk [C]: ? > string.find(s, 1) >
аннлн
ну ты понял
Snusmumriken
Мм, при string.find(25) будет то же самое. Но ты объявляешь переменную. Ты знаешь какого она типа, или ты принудительно приводишь её к нужному. И используешь как хочешь.
аннлн
ээ, што
аннлн
> print(string.find(25, 2)) 1 1
аннлн
в этом и суть
Snusmumriken
Хмм
аннлн
смотри, string.find принимает первым аргументом всё, что теоретически конвертится встроку
Snusmumriken
А с nil'ом не работает. Всё равно падает ))
аннлн
ну потому что nil не конвертится в строку
аннлн
очевидно же
Snusmumriken
> s = nil > string.find(s, 1) ))) Поэтому чекать и/или приводить всё равно надо.
аннлн
у нас тут ещё более хардкорная наркомания бтв
Snusmumriken
Кароч, если строка это строка, то ты знаешь что это строка и используешь как строку. Было бы странно получить число и пытаться в нём что-то финднуть, матчнуть или сабнуть. Это же число. Что с него взять? Регулярками по нему бегать? Это же норкомания.
аннлн
аннлн
проверка типов в любых извращённых вариациях, изолированное окружение для каждого вызова метода (setfenv)
Snusmumriken
Норкомания, да.
Snusmumriken
аннлн
главное — внутрь не смотреть
аннлн
а так всё хорошо