c++ - 如何从lua访问lua堆栈

标签 c++ lua

我有一个简单的程序,它在 lua 文件上运行 luaL_dofile (我们将其称为“script.lua”,然后检查错误,然后再次运行该文件,依此类推。如果程序在任何时候发现错误,它会将其写入日志然后终止。问题是,script.lua 获取用户的输入,然后使用 loadstring 运行该字符串。我不知道想要发生的(以及确实发生的)是 loadstring 创建一个错误(因为用户输入了错误的代码),然后 C++ 程序发现这个错误并终止程序。在我看来,最好的方法是防止C++程序发现错误的方法是将其从堆栈中删除,但我不知道如何从script.lua访问lua堆栈。

最佳答案

显然问题是我一直很傻。我更改了代码,以便它检测到错误然后打印它,而不是使用 assert

script.lua 的示例:

这不能正常工作:

local input = io.read()

assert(loadstring(input))()

这确实可以正常工作:

local input = io.read()

output, error = loadstring(input)
if (output == nil) then
    print (error)
else
    output()
end

关于c++ - 如何从lua访问lua堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31975206/

相关文章:

用于搜索和替换的 C++ 设计模式

c++ - 如何通过 std::call_once 使用重载函数

c++ - C++ 处理类模板及其类型的方法是什么?

c - 为什么空栈的顶部是 lua 中的表?

module - Lua,当所需文件不存在时改变程序流程

oop - Lua - 如何动态调用模块?

c++ - 如何从相似的模板类构建对象

c++ - 将参数与其他参数一起转发给构造函数

c++ - 如何在 Lua 中手动销毁包装的 C++ 类

sockets - lua脚本-套接字连接断开时的结束循环