Egor
Egor
Andrey
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
🐅🤦♂️
Anton
🐅🤦♂️
🐅🤦♂️
Пока точно не буду этим заниматься. Может в след году. Сперва нужно точно понять, чем именно отличаются версии 5.1 и 5.2. Потом сравнить кодовую базу референсных интерпретаторов. Станет понятен объем работы. Учитывая сколько в luajit наворочено - объем скорее всего большой. Хотя если Mike Pall в одиночку запилил jit.. Сколько у него на это времени ушло
Egor
Подскажите (искал, не нашел, но может криво искал?) есть ли аналог как в питоне:
'{0} {1}'.format('Hello', 'World')
У меня на луа есть переменная с хтмлом, нужно динамически изменять в некоторых местах некоторый текст, да, можно было бы туда засунуть переменные, но хочется этот хтмл вывести в начало программы и уже потом его использовать
🐅🤦♂️
Самое простое string.format()
🐅🤦♂️
@Snusmumriken как-то выкладывал кусочек кода простого шаблонизатора
Egor
Мда, проще в каждом цикле создавать эту переменную -_-
Anton
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
Если производительность в этом месте не слишком важна, выглядеть будет чуть посимпатичнее
Snusmumriken
Snusmumriken
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
Snusmumriken
local stamp = os.time()
... код скрипта
stamp = os.time() - stamp
print(stamp, stamp/60)
Anonymous
Anonymous
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 яблок?
Nibeon
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-последовательности. Зато кроссплатформа, на линексах работает.
Igor
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
Roman
Mikhail
Unix Sockets / IPC
Roman
Mikhail