2013-03-12 165 views
4

的Lua具有luaL_error,和lua_error功能的C函数内使用,如:是否有Lua警告而不是Lua错误?

luaL_error(L, "something bad"); 

这将导致一个错误消息被显示和Lua执行停止。该错误消息将包含在那里发生的行和文件:

Error: ../example/ex01.lua:6: something bad 

是否有类似的功能,显示错误,但不破LUA执行?但显示出现在哪里。

+3

您可以使用'print'和以下任一方法自己创建它:http://stackoverflow.com/a/2555881/1633117 – 2013-03-12 11:53:58

+0

这不就是......打印一条消息吗?或者你在谈论消息的具体格式? – 2013-03-12 12:48:40

+0

@NicolBolas,OP需要行号等,格式与用于出错的格式一致 – lhf 2013-03-12 12:50:52

回答

3

复制luaL_error的源代码,并在最后通过使用字符串lua_tostring(L,-1)printf的合适呼叫替换呼叫lua_error。事情是这样的:

LUALIB_API int luaL_warn (lua_State *L, const char *fmt, ...) { 
    va_list argp; 
    va_start(argp, fmt); 
    luaL_where(L, 1); 
    lua_pushvfstring(L, fmt, argp); 
    va_end(argp); 
    lua_concat(L, 2); 
    printf("warning: %s\n",lua_tostring(L,-1)); 
    return 0; 
} 

static int luaB_warn (lua_State *L) { 
     return luaL_warn(L, "%s", luaL_checkstring(L, 1)); 
} 

不要忘记通过增加发言权base_funcslbaselib.c或致电lua_register(L,"warn",luaB_warn)的条目,将其导出到Lua。

+0

我会测试它。我正在使用luajit,所以我没有在源代码中找到它。 – Zhen 2013-03-12 14:44:05

+1

更新:工作,luaL_where是关键:D – Zhen 2013-03-12 14:59:08