如何在Lua中添加功能定义而无需加载文件?

我正在使用 C Fuzzy API,想要加载包含在文件(比如 mycalculator.lua)中的函数模块。看起来这个过程是可以进行的,但是当我尝试后来运行另一个需要 'mycalculator' 的文件 A.lua 时,必须要让 mycalculator.lua 文件在文件系统中可用才行。我希望只把它加载到系统中并在没有 mycalculator.lua 文件的情况下使其可用。有没有一种方法可以让 Lua 系统保持其定义而无需重新加载呢?基本上,我将 mycalculator.lua 转换为字符串然后运行它。我不想将 mycalculator.lua 文件放入文件系统,只想作为字符串交给系统,然后能够在我传递给堆栈的下一个字符串中需要它。谢谢。

点赞
用户734069
用户734069

有一个简单的 Lua 脚本和加载 Lua 模块之间的区别。如果你想要加载一个 Lua 模块,那么你必须通过调用 require 函数来实际加载一个 Lua 模块,就像加载脚本一样。

鉴于你似乎是 Lua 的新手,我应该解释一下。在 Lua 脚本中,你可能已经看到过这样的代码:

require 'mycalculator'

那不是 Lua 的某个特殊语句。那是一个函数调用。这只是一些语法糖,表示:

require('mycalculator')

在 Lua 中,函数可以使用 NAME VALUE 语法而不使用 NAME(...) 语法来调用,但它只允许您发送一个参数。而且参数必须是一个字面量(或表构造函数)。

为了从 C 调用 Lua require 函数,您必须使用 Lua 栈。您必须通过使用 lua_getfield(L, LUA_GLOBALSINDEX,"require"); 从全局表中获取函数。然后,您将一个字符串推送到栈上,其中包含要加载的模块的名称。然后,您使用 lua_pcall 或其他 Lua 函数调用函数来调用它。

2011-12-22 04:24:11