Snusmumriken
Так что function ordered_pairs(tbl, sortfunc) local list = {} for k, v in pairs(tbl) do list[#list + 1] = k end table.sort(list, sortfunc) local index = 0 return function() index = index + 1 local key = list[index] if not key then return end return key, tbl[key], index end end Но упорядоченность будет только у этого итератора, внутри таблички оно всё равно будет иметь рандомный порядок ))
Артем
Такс Понял
Артем
Спасибо!
Snusmumriken
Я так понимаю, это для случаев, где ты C-либы не подключишь? Есть же сишная библиотека Lua-utf8
Ну во-первых да, во-вторых сишная библиотека не предоставляет полного обратного функционала с луашными строчками. Например utf8.sub ведёт себя иначе.
Snusmumriken
Например, ты сделал textinput, с обработкой выделенного текста и положения курсора на string:sub, ты не можешь просто так взять и заменить на utf8:sub, потому что его нет. Всё то же самое надо перекалькулировать и усложнять.
Snusmumriken
Там только utf8.offset, который указывает смещение до текущего символа. Без его длины, кстати. Ну то есть можно дописать функционал, но консистентность немного поломается и будет похоже на манки патчинг.
Денис
Там только utf8.offset, который указывает смещение до текущего символа. Без его длины, кстати. Ну то есть можно дописать функционал, но консистентность немного поломается и будет похоже на манки патчинг.
Мы тут как-то одной компашкой ржали на тему детства и вспомнили "тарабарский" язык: ну, это когда согласные в словах меняются на противоположные по алфавиту с конца (типа ёщ кшою ракь) и т.д. Я за минут пять накатал на луе такой переводчик, и там юзалась эта сишная либа, и вроде sub() брался оттуда... Надо будет посмотреть поточнее...
Snusmumriken
Ну условно проитерировать по символам — да, а вот обрезать а ля "отпилить пять символов справа и семь слева" — уже неприятно.
Snusmumriken
И вот такой штуки мне например тоже очень сильно не хватало. for int startbyte, int endbyte in sstr.uoffsets(string u8text) do local char = u8text:sub(startbyte, endbyte) print(char, startbyte, endbyte) end Итератора по границам символов, мол, обрезаешь сколько тебе нужно. Есть и альтернативный итератор, который просто проходит по символам, но там расход памяти на нарезку строк, кстати.
Денис
Меня до сих пор вот бесит, когда мы виндовых библиотеках работаем с уникодными строками, и приходится гонять строки из мультибайта в WideChar и обратно, вот это боль...
Денис
И да, это относится конкретно к Lua
Денис
Вообще, отсутствие нормальных возможностей по подключению сторонних библиотек или использование системного API меня калит. Был LuaFFI, но это теперь фича жита, а если я не хочу сидеть на 5.1.1?
Денис
Писать сишные биндинги, как по мне, - путь в никуда, ибо тебе помимо луя придется выучить еще и C, еще и работу со стеком Lua понять, а если ты выучил C, то надо тебе тогда Lua?
Денис
Спасибо хотя бы за такие проекты, как Alien. Но ведь и там все негладко: использовать объявленные структуры внутри новообъявляемых структур нельзя, строки фиксированной длины - нельзя, нормально перегонять строки в ожидаемые на платформе - нельзя, нужно городить огород (спасибо хотя бы на том, что это можно сделать существующими способами)...
Snusmumriken
А, ну тут utf8.codes как итератор, я про него забыл.
User
Добрый день, можете подсказать как получить переменную с среды скрипта?
Snusmumriken
Что ты делаешь? Или что ты хочешь сделать?
User
В каком контексте?
В плане я создаю для скрипта среду ( environment ), чтобы изолировать его локальные переменные, и записываю туда "var" 50, и вызываю например функцию в этом скрипте get_script_id( ), и хочу получить переменную var
Snusmumriken
Вот из environment'а и получаешь
User
я получаю, у меня либо возращает пустую переменную, либо nil
Snusmumriken
Какая версия Lua?
User
LuaJIT 2.1.0
Snusmumriken
Ага, сек
User
local env = setmetatable({x = 10}, {__index = _G}) function MyScript() y = 20 return x + y end setfenv(MyScript, env) res = MyScript() print(res) --> 30 print(x, y) --> nil nil print(env.x, env.y) --> 10 20
Вы возможно меня не много не правильно поняли, я в C++ создаю среду, а потом вызываю в луа C++ функцию
User
собственно я и хочу получить в этой функции переменную со среды
Snusmumriken
Лол, так ты же не сказал что ты с С++ создаёшь окружение, как я пойму? )
Snusmumriken
Там — void lua_getglobal(lua_State *L, const char *name);
User
Немного не праивльно сформулировал мысль
Snusmumriken
И вопрос кажется звучит примерно как "Я создаю луа стейт, как из луа стейта получить переменную". Не?
Snusmumriken
Ну вот getglobal пушит глобальное значение в стек, вытряхиваешь его из стека и делаешь с ним что хочешь. Там уже всякие luaL_checknumber/luaL_optnumber и всякая такая ерунда.
User
Всё равно 0 возвращает код: lua_getglobal(L, "var" ); int iVar = lua_tonumber(L, 1); printf(%i\n", iVar) lua_pop(L, 1)
Snusmumriken
А var вообще объявлено?
User
да
User
да
если написать просто в луа: return var и получить значение в инт будет 50, то есть переменная есть
Snusmumriken
Если что, обычно функции работают с концом стека. Последний элемент стека — -1. settop(L, 0); — чистит стек. Я вот убрал из стека nil которым было "a" при первом вызове.
Snusmumriken
Всё равно 0 возвращает код: lua_getglobal(L, "var" ); int iVar = lua_tonumber(L, 1); printf(%i\n", iVar) lua_pop(L, 1)
Так что возможно у тебя в стеке уже был какой-то nil с предыдущих вызовов: lua_getglobal(L, "var" ); int iVar = lua_tonumber(L, -1); printf(%i\n", iVar) lua_pop(L, 1) или lua_settop(L, 0); lua_getglobal(L, "var" ); int iVar = lua_tonumber(L, 1); printf(%i\n", iVar) lua_pop(L, 1)
User
Всё равно 0
User
User
а, всё, работает, спасибо за помощь
Null
лол, на википедии пасхалка
Null
в статье про песню Dragostea Din Tei
Rider
Кодеры, как жизнь?
Snusmumriken
Под пивас
Rider
Спасибо за помощь в Луа. Роботов пока в стронку. Я все по своей трейдерской теме. Создал группу по взглядам. Если админу интересно пишите. Ссылку кидать прямо не буду. Не хочу против правил.
GLOOM {Читайте БИО}
А lua можно использовать для мессенджера ?
Luсky
Да хоть для браузера
Null
что пишешь?
Luсky
что пишешь?
"вступайте в ряды Бетховенов"
Null
"вступайте в ряды Бетховенов"
ну у меня подозрениее что спамер
Lucky
Под пивас
Привет! Снус, подскажи пожалуйста, тот модуль для простых TUI, что ты показывал, нет ли чего-то такого же простого на Python?
Lucky
dialog?
Да не, там совсем простенько. Диалог кучерявый.
Aqendo
бсд с таким умудряется всю систему установить, а ты жалуешься)
Aqendo
Понял
Aqendo
Ещё rich мне советовали
Null
а ncurses тоже слишком сложно, да? :)
Lucky
модуль, который снус показывал, всего 4 кб, 213 строк
Lucky
terminal.lua называется
Snusmumriken
модуль, который снус показывал, всего 4 кб, 213 строк
https://pastebin.com/cP5DF4AM Под вендой не забудь прописать chcp 65001
Lucky
https://pastebin.com/cP5DF4AM Под вендой не забудь прописать chcp 65001
Дык я это, спрашивал, нет ли похожего под питон?
Snusmumriken
Полагаю https://github.com/gravmatt/py-term
Alxius
Lua. как получить имя функции из которой вызвали функцию? E vtyz Есть функция.function screens (x,y) её очень часто вызывают гораздо чаще чем надо.. если бы я мог знать ОТКУДА её так часто вызывают я бы орешил сразу все проблемы.. но я не знаю как узнать откуда "спам" идёт.. Может кто помочь?
Highly Likely
Профилировщиу Луажита кажется тоже умеет показывать нечто такое