我将使用lua fo AI编写程序,因此我试图使其协同工作。
但是,当我尝试从cpp文件加载lua脚本时,出现了以下错误消息:

-- toto.lua:1: attempt to index global 'io' (a nil value)

这是我的lua脚本:
io.write("Running ", _VERSION, "\n")
这是我的cpp文件:
void report_errors(lua_State *L, int status)
{
  if ( status!=0 ) {
  std::cerr << "-- " << lua_tostring(L, -1) << std::endl;
  lua_pop(L, 1); // remove error message
  }
}



int main(int argc, char** argv)
{
  for ( int n=1; n<argc; ++n ) {
  const char* file = argv[n];

  lua_State *L = luaL_newstate();

  luaopen_io(L); // provides io.*
  luaopen_base(L);
  luaopen_table(L);
  luaopen_string(L);
  luaopen_math(L);

  std::cerr << "-- Loading file: " << file << std::endl;

  int s = luaL_loadfile(L, file);

  if ( s==0 ) {
    s = lua_pcall(L, 0, LUA_MULTRET, 0);
  }

  report_errors(L, s);
  lua_close(L);
  std::cerr << std::endl;
  }
  return 0;
  }

非常感谢。

最佳答案

您不应该直接调用luaopen_ *函数。请使用luaL_openlibsluaL_requiref代替:

luaL_requiref(L, "io", luaopen_io, 1);

这里的特殊问题是luaopen_io不在_G中存储模块表,因此提示ionil值。如果您想了解血腥的细节,请查看lauxlib.c中luaL_requiref的源代码。

10-01 09:43