包含子包的 Lua 包

标签 lua lua-api

我用 C 为 Lua 编写了很多模块。每个模块都包含一个 Lua 用户数据类型,我像这样加载和使用它们:

A = require("A")
B = require("B")
a = A.new(3,{1,2,3})
b1 = B.new(1)
b2 = B.new(2) * b1

现在我想将两种用户数据类型放在一个共享库 AandB 中,可以像这样使用

AB = require("AandB")
AB.A.new(3,{1,2,3})

实现这一目标的好方法是什么?现在我的 luaopen_* 函数看起来像这样

int luaopen_A(lua_State *L) {
  luaL_newmetatable(L, A_MT);
  luaL_setfuncs(L, A_methods, 0);

  luaL_newlib(L, A_functions);

  return 1;
};

然后是否仍然可以只加载部分,例如像这样:A = require("AandB.A")?

最佳答案

require("AandB.A") 在您的 C 库中定义 luaopen_AandB_A 时有效,它必须被称为 AandB.so

通常,require 在尝试 C 库时用下划线替换点。

关于包含子包的 Lua 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27304108/

相关文章:

c - 在 Lua 注册表中存储 C 结构

c++ - 错误 LNK2001 : unresolved external symbol in cocos2d-x lua support

lua - "attempt to index a nil value"- Lua 中的错误

c++ - 我可以用 native 代码扩展 Corona 吗?

从C调用Lua函数: Minimal example results in LUA_ERRRUN

c++ - 将另一个类的 C++ 静态函数绑定(bind)到 Lua

ubuntu - 如何在 Luci openwrt sys.exec() 函数中传递命令行参数?

variables - 包含另一个变量值的变量名

c - 如何将 lua_sethook 上下文与 lua_sethook 关联起来?

c++ - <eof> 附近的 lua 函数参数