2013-03-12 77 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