Lua Возвращает результат выполнения в виде строки - PullRequest
0 голосов
/ 07 января 2019

Я использую luaVM на другом языке программирования (Vala) и хочу передать код из vala в lua, чтобы lua возвращал результат выполнения этого кода в виде строки.

> s2="print (5+5)"
> s2
print (5+5)
> loadstring(s2)
function: 0x55834153f080
> func = loadstring(s2)
> func()
10

много чего перепробовал, но у меня ничего не получилось, то есть мне нужно вместо 10 была переменная типа string, содержащая 10. Так что я мог сделать vm.to_string (-1) из Vala и получить "10 «

1 Ответ

0 голосов
/ 07 января 2019

Как сказал Егор, вы можете привести свой результат к строке перед тем, как вернуть ее, используя tostring.

Я бы также добавил, что вы можете использовать dostring, а не loadstring.

Функция load в lua означает компиляцию, а не запускать блок, вместо этого он возвращает функцию при вызове для запуска фрагмента. (loadfile, loadstring)

Функция do скомпилирует и запустит содержимое. (dofile, dostring)

Подробности можно найти здесь: Lua: 8 - Компиляция, выполнение и ошибки

Как и dofile, loadfile также загружает кусок Lua из файла, но он не запускает кусок. Вместо этого он только компилирует кусок и возвращает скомпилированный кусок как функцию.

Этот раздел говорит более непосредственно с loadfile, но страница охватывает loadstring.


если dostring не определено, это может быть так:

function dostring(s)
    return assert(loadstring(s))()
end

Если вы используете версию lua позже, то 5.1 loadstring становится load

...