
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
как тогда правильно