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

7

Lua提供了luaL_errorlua_error函数,可以在C函数中使用,例如:

luaL_error( L, "something bad" );

这将导致错误消息显示,并使Lua执行停止。错误消息将包含它发生的行数和文件名:
Error: ../example/ex01.lua:6: something bad

是否有类似的功能可以显示错误,但不会中断lua执行,并显示发生错误的行。


3
你可以自己构建它,使用print和这两种方法之一:https://dev59.com/V3E85IYBdhLWcg3w436o#2555881 - Martin Ender
1
那不就是...打印一条消息吗?还是你在谈论消息的特定格式? - Nicol Bolas
@NicolBolas,OP希望行号等以与错误格式一致的格式显示。 - lhf
1个回答

5

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

别忘了将其导出为Lua,方法是在lbaselib.c中的base_funcs中添加一个条目或调用lua_register(L,"warn",luaB_warn)


我会测试它。我使用的是luajit,所以在源代码中没找到它。 - Zhen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接