Snusmumriken
что-то я не догнал
*main.lua* local conf = {} conf.foo = 25 local module = require"module"(conf) print(conf.bar) --> 100500 *module.lua* local conf local M = {} function M.foo(a, b) return conf.foo - conf.bar + a - b end return function(c) conf = c conf.bar = 100500 return M end
Артём
Остров Русский. ДВФУ. Салют в честь дня международного студенческого единства
Артём
Артём
просто я тут в командировке и решил с вами поделиться :)
Anton
Если кто не видел, Хишам проводит опрос об используемых версиях Луа: https://forms.gle/mBJo648Dbjve5CUn9
🐅🤦‍♂️
Если кто не видел, Хишам проводит опрос об используемых версиях Луа: https://forms.gle/mBJo648Dbjve5CUn9
Хотел спросить - а что за Хишам? Но уже загуглил конечно.. 5.1 - потому как jit
Anton
Хотел спросить - а что за Хишам? Но уже загуглил конечно.. 5.1 - потому как jit
> 5.1 – потому как JIT Думаю, будет весомая доля таких ответов.
🐅🤦‍♂️
Anton
LuaVela для 5.2 и выше не планируется?
Силами IPONWEB – очень вряд ли. Patches are still welcome.
🐅🤦‍♂️
Пока точно не буду этим заниматься. Может в след году. Сперва нужно точно понять, чем именно отличаются версии 5.1 и 5.2. Потом сравнить кодовую базу референсных интерпретаторов. Станет понятен объем работы. Учитывая сколько в luajit наворочено - объем скорее всего большой. Хотя если Mike Pall в одиночку запилил jit.. Сколько у него на это времени ушло
Egor
Подскажите (искал, не нашел, но может криво искал?) есть ли аналог как в питоне: '{0} {1}'.format('Hello', 'World') У меня на луа есть переменная с хтмлом, нужно динамически изменять в некоторых местах некоторый текст, да, можно было бы туда засунуть переменные, но хочется этот хтмл вывести в начало программы и уже потом его использовать
🐅🤦‍♂️
Самое простое string.format()
🐅🤦‍♂️
@Snusmumriken как-то выкладывал кусочек кода простого шаблонизатора
Egor
Мда, проще в каждом цикле создавать эту переменную -_-
Egor
http://lua-users.org/wiki/StringInterpolation хммм..чет нашел.
Egor
А , есть ли более красивый способ написать такое: if x>72 and x < 77 and y>19 and y<27 then .. end ----- if x>30 and x<34 and y>21 and y<31 then ... end Это координаты кликов на экране.
Oleg
А , есть ли более красивый способ написать такое: if x>72 and x < 77 and y>19 and y<27 then .. end ----- if x>30 and x<34 and y>21 and y<31 then ... end Это координаты кликов на экране.
Я б написал функцию для проверки и использовал ее local function in_range(x, y, range) return x > range[1][1] and x < range[1][2] and y > range[2][1] and y < range[2][2] end if in_range(x, y, {{72, 77}, {19, 27}}) then do_something() end if in_range(x, y, {{30, 34}, {21, 31}}) then do_another_thing() end Если производительность в этом месте не слишком важна, выглядеть будет чуть посимпатичнее
Egor
Вот тут. Загоняем табличку с ключами, получаем ништяки.
О! я чет помню такое. Я заюзал function interp(s, tab) return (s:gsub('($%b{})', function(w) return tab[w:sub(3, -2)] or w end)) end
Snusmumriken
Вот да, что-то похожее
Snusmumriken
Только $ в регулярке лишнее, помнится. Поправь регулярку.
Anonymous
Всем привет
Anonymous
Подскажите,нужно в конце скрипта вывести время его работы,в минутах и секундах как это проще сделать?
Igor
Берёшь время старта, пишешь в переменную, а потом из времени окончания вычитаешь время старта
Igor
В юникс формате время можно получить функцией os.time()
Anonymous
Делал так: в начале скрипта - startTimeMin = os.date('%M') startTimeSec = os.date('%S') в конце endTimeMin = os.date('%M') endTimeSec = os.date('%S') ну и затем в принт вставлял это дело так: workTime = endTimeMin - startTimeMin..' мин. '..endTimeSec - startTimeSec..' сек.' Вообщем правильно через раз отображается, только что показало время выполнения минус 53 минуты 😂 Знаю что есть os.clock но как его вывести не поймк
Igor
Там в секундах
Snusmumriken
local stamp = os.time() ... код скрипта stamp = os.time() - stamp print(stamp, stamp/60)
Anonymous
Понял теперь,спасибо большое))
Snusmumriken
print у гг округлил дробную до целой. В норме это не так.
Snusmumriken
Если нужны милисекунды — вместо os.time — os.clock
Snusmumriken
Если нужно полное время работы — можно даже без stamp'а, просто print(os.clock(), os.clock()/60) Клок как раз его и отсчитывает, время с начала скрипта.
Anonymous
Сделал пока так print(stamp/60,' мин. ',stamp,' сек.')
Anonymous
Anonymous
Еще раз благодарю
Snusmumriken
Если тебе нужно кол-во секунд от минут — rint(stamp/60,' мин. ',stamp % 60,' сек.')
Maxim
У Изи 6 яблок, а у Вани ни одного. Изя дал Ване 3 яблока. Вопрос: когда Ваня должен вернуть Изе 5 яблок?
Igor
Здравствуйте. Столкнулся с проблемой такой небольшой: мне нужно прочитать "сырой" ввод, летящий в stdin. То есть, чтобы функция io.read() не ждала newline символа. Какое решение самое простое, а главное - кроссплатформенное (linux/windows)?
Igor
Ясно, что стандартными средствами луёв это не сделать, но может кто-то знает библиотеку для этого дела
Igor
Которая и под windows компилится (желательно с msvc) и под linux (clang/gcc)
🐅🤦‍♂️
Может я не прав, просветите, но мне кажется, что читать сырой ввод как ты хочешь из C проблемно
Igor
в принципе так оно и есть
Igor
ну хотелось бы увидеть что-то типа curses для Lua, но не только с posix-имплементацией
Snusmumriken
Ты хочешь нажимать кнопочки, и чтобы на них сразу реагировало?
Igor
но ничего особо не нашёл
Igor
ну по большей части пока что да
Snusmumriken
Snusmumriken
Тут просто проверка зажатой клавиши средствами ОС. И это работает.
Igor
хмм
Igor
я так и думал сделать, но не хотелось
Igor
думал что-то получше придумается
Snusmumriken
Под вендой с luajit user32 = ffi.load('user32') ffi.cdef[[ int GetKeyState(int nVirtKey); ]] -- copypaste local codes = { left = 0x25, up = 0x26, right = 0x27, down = 0x28, } function keyIsDown(code) return user32.GetKeyState(code) < 0 end Код змейки: https://pastebin.com/X3ynm99t
Igor
есть, в принципе, функция getch, если уж в Си лезть, но если в винде она присутствует по дефолту (но с названием _getch), то в линуксах её уже может и не оказаться
Snusmumriken
Либа для графона в консоли — https://pastebin.com/cP5DF4AM Но нужна win10, ибо там влепили ansi-escape-последовательности. Зато кроссплатформа, на линексах работает.
Snusmumriken
Для такого обычно таки дёргают ncurses, потому что под вендой она дёргает вендовую консольную апи. Там это сишными функциями а не вводом в stdin.
Igor
А разве ncurses изкоробки дружит с виндой?
Igor
Я помню только про существование какой-то pdcurses чтоль
Igor
Вообще ncurses возможно и соберётся под виндой из mingw, но хотелось бы msvc
Snusmumriken
А, ну вот. #ifdef _WIN32_ #include "pdcurses.h"
Mikhail
Утро доброе! С масленицей! убегаю с nodejs в виду невозможности работы с Unix Sockets: SOCK_SEQPACKET подскажите что-нить лайтвейтное для SOCK_SEQPACKET спасиб @Snusmumriken (кроме turbo)
Snusmumriken
Ненаю ))
Mikhail
Mikhail
Unix Sockets / IPC
Roman
Unix Sockets / IPC
На какой платформе?
Mikhail
А где это у тебя seqpacket есть?
а... в железке есть они. вот надо читать
Mikhail
На какой платформе?
платформа типа UbuntuCore
Roman
а... в железке есть они. вот надо читать
Сокеты - они в ос, а не в железе