Particle
07.05.2018
11:19:22
я вот сейчас как раз смотрю про сетенв, но чёт не совсем понимаю, как это сделать
постоянно ошибки выдает
догнал, как сделать без энвиронментов -
local a = 1
local b = 3
local sign = "+"
local res = loadstring("local res ="..tostring(a)..sign..tostring(b).." return res")
print(res())
Lucky
07.05.2018
14:06:20
блин, а что сложного сделать local log = math.log
Google
Particle
07.05.2018
14:11:30
я не понимаю, как работать с энвиронмнтами =(
Philipp
07.05.2018
14:18:11
Lucky
07.05.2018
14:18:50
да ладно, я уже книжкой кинул.
Particle
07.05.2018
14:21:25
=) Я хочу передавать в калькулятор задачу с динамическими переменными и их количеством (что бы разные задачи решал) и получать ответ.
к примеру:
a + 1 =
1/b +c =
1-(1+c)*d =
вот так хочу)
Philipp
07.05.2018
14:22:00
Объявляй их глобальными, костыль – но тебе должно подойти
Particle
07.05.2018
14:22:04
но для loadstring приходится всё ручками прописывать с конкатенацией =/
ну да, не симпатично, но выход. Может найду еще какое решение...
Philipp
07.05.2018
14:23:27
Ну, если это прога – вот чисто для себя без планов на расширение и оптимизаци – то вполне себе рабочее решение
Particle
07.05.2018
14:24:28
я это для игры делаю, т.ч. незнаю, что может понадобиться в будущем. Потому, хочется сразу нормально сделать
Philipp
07.05.2018
14:25:17
Тогда надо думать
По хорошему, в строку передавать стоит только численные значения – конкатенацией
Можешь написать какую-нибудь функцию для этого
Или даже простенький парсер для этого
Google
Philipp
07.05.2018
14:28:04
Что-то вроде
eval("a + b + c", a, b, c), где a, b, c – некоторые переменные извне. Ну как-нибудь так, например
Кажется, если я не ошибаюсь, в какую-то из функций load/loadstring можно передавать контекст, можно туда покопать
Particle
07.05.2018
14:32:28
я пока вот так сделел. Этого на данный момент хватает, но хочется расширить и для каждого частного случая надо отдельно дописывать строки.
local function supplement(num, sign, round)
if sign == "+" then
return num + annex
elseif sign == "-" then
return num - annex
elseif sign == "*" then
return num * annex - 1
elseif sign == "/" then
if round == "<" then
return math.floor(num / annex)
elseif round == ">" then
return math.ceil(num / annex)
else
return 1
end
else
return 1
end
end
Хочется сделать более наглядно, к примеру, таблицу с набором строк - задач, которые будут легко читаться и использовать переменные из локального пространства функции
Philipp
07.05.2018
14:34:31
Для начала, знак можно передавать неявно, в самой строке, по идее
Блин, мне так лень писать. Можно я войс запишу, а? :D
Particle
07.05.2018
14:34:55
=)
Philipp
07.05.2018
14:35:10
Ладно, текстом нагляднее будет
Particle
07.05.2018
14:38:36
хочу найти такой вариант, что бы не хардкодить
Philipp
07.05.2018
14:39:53
Короче.
1) Вот такую вот строчку без проблем можно разбить регуляркой. Вычленит переменные и знак между ними. В целом, в выражении всё то, что не число и не знак – переменная:
"a + b"
2) Чтобы избавиться от нагроможденя if/elseif/else в определеннии знака можно использовать таблицу:
signs = {}
signs['+'] = function(a, b) return a + b end
signs['-'] = function(a, b) return a - b end
signs['<'] = function(a, b) return math.floor(a/b) end
и использовать вот так:
signs[sign](num, annex)
3) Переменные придется хранить либо в отдельной табличке, доступной функции eval, требуемые для подсчета и ставить её контекстом для лоадстринга, либо хранить в глобалспейсе
Это вот по минимуму, что пришло в голову сразу. @Snusmumriken подскажет больше насчет переменных из внешнего скоупа
Particle
07.05.2018
14:41:24
Спасибо большое!
Philipp
07.05.2018
14:41:38
Да в целом не за что
Lucky
07.05.2018
15:01:42
Particle
07.05.2018
15:06:42
Philipp
07.05.2018
15:07:19
У меня есть некоторые сомнения, что Луа хорош в плане механик рандома. Или у тебя игра чисто на Луа?
Lucky
07.05.2018
15:07:54
ему чисто балансировщик нужен.
Particle
07.05.2018
15:08:01
это настолка, просто на луа я протестирую механику.
угу
Philipp
07.05.2018
15:08:17
А, ясно
Particle
07.05.2018
19:38:39
Ребят, а еще подскажите пожалуйста, как мне из этой строки "4d12/2" записать в разные переменные числа и знак "/"? d надо исключить.
мучаюсь с gmatch, но чёт никак не выходит.
Google
Particle
07.05.2018
19:42:22
так, стринг match работает
усё, заработало
Кароче, вроде, то что надо выходит =)
https://pastebin.com/8aVVyDSF
local task = "4d2<(e/2)+0"
local dices, sides, sign1, annex1, sign2, annex2
= string.match(task, "(%d+)d(%d+)(%X+e%X+)(%d+)(%X+)(%d+)")
А как тут можно сделать так, что бы при task = "4d2" луа не ругалась?
Sergey
08.05.2018
10:59:02
добрый день можете подсказать как мне можно отправить запрос вида $ curl -LO https://download.cdn.yandex.net/from/yandex.ru/tech/ru/speechkit/cloud/doc/guide/files/speech.wav
https://tech.yandex.ru/speechkit/cloud/doc/guide/concepts/speechkit-cloud-asr-quick-start-docpage/
описания где можно добавить хедер и отправиь файл не нашел
Vadim
08.05.2018
11:04:22
всё бы хорошо, но где связь с Lua? :)
Sergey
08.05.2018
11:04:36
сам скрипт на lua
где надо сделать отправку файла
Vadim
08.05.2018
11:04:48
тогда бери Lua-cURL
у него в документации есть в т.ч. о пост-запросах
Sergey
08.05.2018
11:05:14
есть примеры не могу найти варианты работы с отправокй файла
Vadim
08.05.2018
11:05:28
если что, его мейнтейнеры - я и @moteus
но я сейчас улетаю по делам :)
Sergey
08.05.2018
11:05:43
https://forums.coronalabs.com/topic/28919-posting-a-file-with-httprequest/
нашел вроде пример
Vadim
08.05.2018
11:05:53
и да, примеры есть в документации
http://lua-curl.github.io/#example-3-posting-data
Sergey
08.05.2018
11:07:38
а то что яндекс просит —data binary
Google
Sergey
08.05.2018
11:07:43
это как можно указать
Vadim
08.05.2018
11:09:20
—data-binary <data>
(HTTP) This posts data exactly as specified with no extra processing whatsoever.
lua-curl итак делает именно так, насколько я помню
ShadoWalkeR
08.05.2018
11:12:08
Vadim
08.05.2018
11:13:39
ShadoWalkeR
08.05.2018
11:13:55
Ну и чтобы гордо говорить "У нас есть документация!"))))
Sergey
08.05.2018
11:37:44
local cURL = require "cURL"
c = cURL.easy{
url = "https://asr.yandex.net/asr_xml",
post = true,
httpheader = {
"Content-Type: audio/x-wav";
};
postdata = {
— post file from filesystem
name = {file="/tmp/79196480605.wav",
type="data-binary"},
};
postfields = {
'{"uuid":"01ae13cb744628b58fb536d496daa1e6"}',
'{"key":"1234566789"}',
'{"topic":"queries"}'
}
}
c:perform()
ощибка выполнения скрипта
Насибуллин
08.05.2018
11:42:45
postdata строку чтоли ждет
а, скорее postdata:name
почему у тебя в нейм таблица? странно же)
Sergey
08.05.2018
11:50:58
local cURL = require "cURL"
f = io.open("/tmp/79196480605.wav", "w")
c = cURL.easy{
url = "https://asr.yandex.net/asr_xml",
writefunction = f,
post = true,
httpheader = {
"Content-Type: audio/x-wav";
};
postfields = '{"uuid":"01ae13cb744628b58fb536d496daa1e6","key":"12345678","topic":"queries"}';
}
c:perform()
f:close()
print("Done")
вроде работает
но как мне результат
вывести
XML
Насибуллин
08.05.2018
11:51:40
а там голый хмл или какой-то формат?
что возвращает яндекс?
Google
Sergey
08.05.2018
11:51:50
формат
Насибуллин
08.05.2018
11:51:54
хмл это же просто строка
Sergey
08.05.2018
11:52:01
мне бы просто посмтреть что щас вернуло
Насибуллин
08.05.2018
11:52:07
если хочешь с тегами вывести то просто io.print
или как там в луа
просто напечатай
Sergey
08.05.2018
11:52:26
io.print(c)
так
?
Насибуллин
08.05.2018
11:52:31
наверн
я на луа не писал
ShadoWalkeR
08.05.2018
11:53:17
Sergey
08.05.2018
11:55:09
ShadoWalkeR
08.05.2018
11:56:09
Выкинуть io и поставить filesystem. Я пробовал через io работать - это дохлый номер - неработоспособно
Sergey
08.05.2018
12:02:37
как тогда правильно