是否有 Lua 警告而不是 Lua 错误?

Lua有luaL_errorlua_error函数,可在C函数内使用,例如:

luaL_error(L,“something bad”);

这将导致显示错误消息并停止Lua执行。错误消息将包含其出现的行和文件:

错误:../example/ex01.lua:6:something bad

是否有类似的函数可以显示错误消息但不中断Lua执行?同时显示出错的行。

点赞
用户107090
用户107090

luaL_error的源代码复制并将末尾的lua_error调用替换为使用字符串lua_tostring(L,-1)调用适当的printf。类似这样:

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));
}

别忘了通过向lbaselib.c中的base_funcs添加一个条目或调用lua_register(L,“warn”,luaB_warn)将其导出到Lua中。

2013-03-12 12:50:03