Lua 将执行结果作为字符串返回

我在另一种编程语言 (Vala) 中使用 luaVM,并希望将代码从 Vala 传递给 Lua ,以便 Lua 将执行此代码的结果作为字符串返回。

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

尝试了很多方法,但我没有成功。也就是说,我需要的不是 10 ,而是一个包含 10 的字符串类型的变量。所以,我可以在 Vala 中使用 vm.to_string(-1) 并获取 "10"

点赞
用户7396148
用户7396148

如Egor所述,你可以在返回结果之前使用tostring将其转换为字符串。

我还要补充的是,你可能想使用dostring而不是loadstring

在lua中,load函数意味着编译而不运行一块代码,它返回一个函数,当调用它时会运行代码块。(loadfileloadstring)

do函数会编译并运行其内容。(dofiledostring)

更多详情请查看此处:Lua: 8 - Compilation, Execution, and Errors

像dofile一样,loadfile也从文件中加载Lua代码块,但是它不运行该代码块。相反,它只编译代码块并将其作为函数返回。

这部分更直接地讲解了loadfile,但该页面也涵盖了loadstring


如果dostring未定义,可以使用以下方式定义:

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

如果您使用的是lua的5.1版本之后,则loadstring变成了load

2019-01-07 19:23:30