3

我在 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")

4

2 回答 2

2

require("AandB.A")如果您luaopen_AandB_A在 C 库中定义,则必须调用AandB.so.

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

于 2014-12-05T01:30:13.633 回答
1

您可以做的一件事是编写一个 lua 脚本模块,该模块同时包含AB. 然后,您可以从您的使用代码中要求该脚本:

-- AandB.lua
return { A = require 'A', B = require 'B' }

如果您只想加载部分模块,您可以这样做:

A = require "AandB".A
于 2014-12-04T23:08:08.377 回答