Anonymous
Всем привет. Вопрос не в этв ветку конечно, но тут много грамотных людей, может кто вощьмется...
Есть такая вот задача, все подробно расписал:
https://yadi.sk/i/2gp9lz6o1b142w
Может у кого есть желание взяться, за результат отблагодарю НОВЫМ 7 айфоном, или деньгами.
Pavel
В сборках игр, в которых я участвовал, тоже было дебаг меню. которое работало ИСКЛЮЧИТЕЛЬНО на тестовых серваках.
в проде просто вырезался код с сервера.
а баблишко, опыт И так далее в проде накидывались через отправку бонусов.
Sasha
Всем привет. Подскажите, глобальные переменные хранятся в _G таблице. В каком месте хранятся локальные переменные?
Snusmumriken
Snusmumriken
А зачем тебе? Дебаггер пишешь?
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
Sasha
которая сама удаляется после выхода из блока
Igor
Нет, под локальные используется только сишная фигня
Snusmumriken
Нет, не в таблицах а в специальных прицепленных к функциям структурах, где ошиваются замыкания и как раз локальные переменные. Функция — составная штука.
Igor
В Lua они торчат только через прослойку в виде дебаггера
Sasha
О
Sasha
Ничего не понял, но очень интересно
Sasha
😂
Igor
Говорю же, ман почитай, так даже легче будет
Sasha
Но в целом понял, что так просто как _G их не получить, так что спасибо, ребят)
Igor
Там всё понятно расписано о том, как работают локальные переменные
Igor
И машина Lua в целом
Sasha
Спасибо
Igor
Всегда пожалуйста
Snusmumriken
Хмм, надо таки разобраться в дебажной либе. Потому что оно кажись смотрит именно что в замыкания а не в локальные переменные.
Highly Likely
Highly Likely
Чекни гайд luaimplementation5.0
Highly Likely
Там емнип об этом говорится
Anonymous
аннлн
Snusmumriken
аннлн
ну, баян про два стула же.
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
аннлн
главное — внутрь не смотреть
аннлн
а так всё хорошо