Lucky
Упс
Lucky
Я думал, что пил и есть мануал.
Saphire
Что есть мануал?
https://www.lua.org/manual/5.3/
Saphire
Шикарное чтиво :Р
Lucky
А на русском есть?
Saphire
Фиг знает, гугл в помощь
Saphire
Собственно есть, ура.
Lucky
Sergey
как заменить пробелы на %20
Sergey
str = string.gsub(text, "%s+", "\\%20")
Sergey
пробовал так /usr/local/freeswitch/scripts/SMS.lua:57: invalid capture index
Saphire
" "
Sergey
/usr/local/freeswitch/scripts/SMS.lua:57: invalid capture index str = string.gsub(text, "%s+", "%20")
Sergey
также
Sergey
local function replace(str, what, with) what = string.gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern with = string.gsub(with, "[%%]", "%%%%") -- escape replacement return string.gsub(str, what, with) end result = replace(text, " ", "%20")
Sergey
вот решение
Saphire
...зачем. Что ты делаешь вообще? Можно пример исходной строки и результата?
Anonymous
Добрый день. Подскажите пожалуйста, как написать виндового демона на lua? Т.е. висит скрипт который принимает команды и исполняет их при этом не завершаясь .
Ж
while true do … end
Snusmumriken
Добрый день. Подскажите пожалуйста, как написать виндового демона на lua? Т.е. висит скрипт который принимает команды и исполняет их при этом не завершаясь .
Задачка забавная, но обычно требует написания своего интерпретатора (который как раз превращается в сервис). Ну то есть, допустим, маленькая программка, которая цепляет луа-скрипт и автоматически выполняет. Лучше не в виде while true, а условный скрипт с функцией main, которую интерпретатор дёргает каждый раз в цикле, вместе с приёмом сигналов от ОС. Или с выгрузкой в скрипт функции реакции на эти самые сигналы, чтобы скрипт получился: while true do -- your stuff local event = service_update() if event == 'EXIT' then os.exit() end sleep(0.5) -- это тоже стоит выгрузить end Так даже лучше, потому что позволяет правильно завершить сервис с луёвой стороны. https://habr.com/ru/post/71533/
Anonymous
Задачка забавная, но обычно требует написания своего интерпретатора (который как раз превращается в сервис). Ну то есть, допустим, маленькая программка, которая цепляет луа-скрипт и автоматически выполняет. Лучше не в виде while true, а условный скрипт с функцией main, которую интерпретатор дёргает каждый раз в цикле, вместе с приёмом сигналов от ОС. Или с выгрузкой в скрипт функции реакции на эти самые сигналы, чтобы скрипт получился: while true do -- your stuff local event = service_update() if event == 'EXIT' then os.exit() end sleep(0.5) -- это тоже стоит выгрузить end Так даже лучше, потому что позволяет правильно завершить сервис с луёвой стороны. https://habr.com/ru/post/71533/
Спасибо:) Внесу каплю конкретики. Это нужно для эффективного взаимодействия между хостовой ОС и гостевой на виртуальной тачке. Т.е. с хоста посылаются ключи в гостя, а гостевой скрипт обрабатывает эти ключи и что то делает
Andrey
коллеги такой вопрос
Andrey
print (true > false)
Andrey
как сделать что бы работало и выдавало true
Andrey
а не ошибку
mva
это не числа
Andrey
метатаблицу туда можно просунуть ?
Lucky
local true = 1
Lucky
local false = 0
Andrey
:)
fgntfg
Какой грязный хак, мне нравится
Andrey
нет более изящных решений ?
Andrey
не, я не знаю каких типов придут переменные в сравнение и мне нужно понимать что больше а что меньше
Andrey
типа false=0 true>0 1>0
Andrey
проверять тип переменных и делать разные сравнения - мне кажется костыльно
fgntfg
Можно бахнуть всё в си, там, если правильно помню, можно сравнить кто больше среди bool
Andrey
понял. такую хорошую вещь и ... прикрыли - вроде бы логически очевидно что true всегда больше чем false не буду си - буду тип проверять и переводить в пространство цифр
Andrey
print (tonumber(true)) print (tonumber(false)) еще этот nil
Andrey
со строкой все норм как раз :) и с таблицей
Andrey
print ("A"<"B")
Andrey
подскажите где я здесь ошибся не хочу две проверки делать
Andrey
function isFirstMoreThenSecond(fisrt,second) for _,v in pairs({first,second}) do if (type(v)=="boolean") then if v == false then v=0 else v=65535 end end end return first > second end
Andrey
да я понимаю :)
Andrey
вот такая конструкция получилась как бы ее соптимизировать
Andrey
function toMyNumber(p) if type(p) == "boolean" then if p then return 65535 else return 0 end end return p end function isFirstMoreThenSecond(first,second) local myfirst=toMyNumber(first) local mysecond=toMyNumber(second) return (myfirst > mysecond) end print (isFirstMoreThenSecond(true,false)) print (isFirstMoreThenSecond(false,false)) print (isFirstMoreThenSecond(true,0)) print (isFirstMoreThenSecond(1,0))
Saphire
Ну
Saphire
В луа можно тернарить: (condition and value_true or value_false)
Saphire
Мне тоже
Saphire
Что хотел сказать автор вообще?
Snusmumriken
local bool = {} bool.__index = bool function bool:__call(v) return setmetatable({not not v}, self) end local function checkSelf(v) return type(v) == 'table' and getmetatable(v) == bool end function bool.__lt(a, b) if checkSelf(a) then local v = a[1] and 1 or 0 return v > b end local v = b[1] and 1 or 0 return v < a end Ехехехе
Andrey
О, спасибо за пример!
Snusmumriken
О, спасибо за пример!
Пожалуйста за извращение
Lucky
можно тру и фелс в строки перегнать и потом уже сравнивать, если сильно надо
Andrey
можно тру и фелс в строки перегнать и потом уже сравнивать, если сильно надо
боюсь тогда он намберы будет по алфавиту сравнивать ...
Snusmumriken
Но класека — примерно то что ты делал local function getNum(v) if type(v) == 'boolean' then return v and 1 or 0 end return v end print( getNum(true) > getNum(false) ) --> true
Lucky
хех, сила в правде
Andrey
вот, так компактнее, спасибо
Snusmumriken
Можно ещё компактнее.
Lucky
Инстед обновился
Lucky
https://instead-hub.github.io/post/2019-03-08-instead-3-3-0/
Andrey
Можно ещё компактнее.
local function getNum2(v) return (type(v)=='boolean') and (v and 1 or 0) or v end —так ?
Snusmumriken
Ну да, вроде того
Andrey
спасибо!
Snusmumriken
При очень большом желании, вообще все if-els'ы можно заменить на тернарники, но не нужно. И приходится готовить переменные под значения, хехе.
Andrey
еще вопрос
Andrey
--пример 1 local function a() -- some code b() -- some code end local function b() end --пример 2 local function a() -- some code b() -- some code local function b() end end
Snusmumriken
Форматируй.
Andrey
правильно ли я понимаю что если b - нигде не нужна кроме как в a
Andrey
то тело b - лучше размещать внутри a
Snusmumriken
Выдели кусок кода и нажми ctrl + shift + m
Snusmumriken
правильно ли я понимаю что если b - нигде не нужна кроме как в a
Смотря с какой частотой она используется. Если ты разметишь её внутри a, то при каждом вызове a будет создаваться новая функция.
Snusmumriken
Это может привести к просадкам производительности на частом дёргании. Особенно противно где-то тут: for i = 1, 1000 do local func = function(a, b) return a + b end local v = func(i, i - 10) local c = func(i + 10, i + 20) end Тут создастся тысяча лишних функций. Лучше вынести за цикл.
Andrey
Snusmumriken
Ты с телефона?
Andrey
нет, с компа
Andrey
я понял идею
Andrey
спасибо