我有一个C ++程序,它创建一个lua_State并运行自定义Lua脚本。如果我想让lua_State预加载cjson而不是要求调用"要求"在Lua代码中,我可以知道它是否可行,我该怎么做?
答案 0 :(得分:2)
是的,这是可能的。请使用luaL_requiref
。使用this或this函数作为参数。您需要将cjson代码链接到您的可执行文件,编译器可能会欣赏luaL_requiref
函数的函数声明。如果你使用Lua 5.1(还没有ExceptionsManager.js
),你可以使用或偷取Compat-5.3
。
答案 1 :(得分:1)
如果您不想在脚本中调用require,可以通过C ++调用require一次,并从返回值中创建一个全局变量。
例如在C ++中执行:
if (luaL_dostring(L, "cjson = require(\"cjson\")")) // run code
std::cout << luaL_checkstring (L, -1) << std::endl; // print error
之后,您可以在cjson
这样的脚本中使用cjson.new()
,而无需任何需要或此类调用,因为它作为全局变量存在。
由于C ++使用require,因此稍后在lua中调用require将不会再次运行cjson文件,这与使用dofile或类似文件不同