我正在使用C模糊API,我想加载一个文件中包含的函数模块,让我们说mycalculator.lua。这似乎运行正常,但是当我后来尝试运行另一个需要'mycalculator'的文件A.lua时它不起作用,除非mycalculator.lua文件在文件系统上可用以重新加载。我试图将其加载到系统中,然后在文件系统中没有mycalculator.lua的情况下使其可用。有没有办法让lua系统保持定义而不再加载它?基本上我将mycalculator.lua转换为字符串然后运行它。我不想把mycalculator.lua文件放到文件系统中,我只想将它作为一个字符串交给我,然后能够在下一个字符串中将它传递给我传递给堆栈谢谢
答案 0 :(得分:2)
简单地执行Lua脚本和加载Lua模块之间存在差异。如果您希望加载Lua模块,那么您必须完全按照脚本的方式加载Lua模块:通过调用require
。
既然你似乎是Lua的新手,我应该解释一下。您可能在Lua脚本中看到过这样的代码:
require 'mycalculator'
这不是对Lua的一些特别声明。这是一个函数调用。这只是一些语法糖:
require('mycalculator')
Lua中的函数可以使用NAME VALUE
语法而不是NAME(...)
语法调用,但它只允许您发送一个参数。参数必须是文字(或表格构造函数)。
要从C调用Lua require
函数,必须使用Lua堆栈。您必须使用lua_getfield(L, LUA_GLOBALSINDEX, "require");
从全局表中获取该函数然后,将字符串推送到包含要加载的模块名称的堆栈。然后,使用lua_pcall
或任何Lua函数调用函数来调用它。