从luaL_loadstring之类的东西中是否可以获得有关语法错误出现位置的更多信息?

luaL_loadstring 根据文档如果有语法错误就会返回错误。(当存在语法错误的情况下)

是否有一种方法可确定 Lua 首先确定出语法错误或除了指示存在语法错误的返回值之外是否有进一步的信息?

点赞
用户1009479
用户1009479

luaL_loadstring 调用 lua_load 来执行实际任务,来自手册:

加载一个 Lua 代码块(但不运行它)。如果没有错误, lua_load 把编译好的函数压入栈顶。否则,它会推送一个错误消息。

所以,您可以检查 luaL_loadstring 的返回值,如果它返回错误,则检查栈中的错误消息。

2013-08-22 07:58:38
用户1847592
用户1847592

这只是对于 Yu Hao 回答的一个示例。

请不要害怕,这只是一些 Pascal 程序的摘录 :-)

procedure TForm1.Button1Click(Sender: TObject);
   const
      Script = 'a = 56+';  // luaL_loadstring() 无法加载此代码
   var
      L: Plua_State;
begin
   // 启动 Lua;
   L := luaL_newstate;
   if L <> nil then
      try
         // 加载 Lua 库
         luaL_openlibs(L);
         // 加载包含我们要运行的脚本的字符串
         if luaL_loadstring(L, PChar(Script)) <> 0 then
            // 如果发生错误,则错误消息在栈顶
            ShowMessage('无法加载() 脚本#' + String(lua_tostring(L, -1)))
         else begin
            // 要求 Lua 运行脚本
            if lua_pcall(L, 0, 0, 0) <> 0 then
               ShowMessage('运行脚本失败#' + String(lua_tostring(L, -1)))
            else begin
               lua_getglobal(L, 'a');
               ShowMessage('OK# a = ' + IntToStr(lua_tointeger(L, -1)));
            end;
         end;
      finally
         // 关闭 Lua;
         lua_close(L);
      end;
end;
2013-08-22 17:58:17