我在C中为Lua编写了许多模块。每个模块都包含一个Lua userdata类型,我加载并使用它们:
A = require("A")
B = require("B")
a = A.new(3,{1,2,3})
b1 = B.new(1)
b2 = B.new(2) * b1
现在我想将两个userdata类型放在一个可以像这样使用的共享库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")
?
答案 0 :(得分:2)
require("AandB.A")
如果您在C库中定义luaopen_AandB_A
,则必须将其命名为AandB.so
。
通常,require
在尝试使用C库时用下划线替换点。
答案 1 :(得分:1)
您可以做的一件事是编写一个lua脚本模块,同时提取A
和B
。然后,您可以从使用代码中要求该脚本:
-- AandB.lua
return { A = require 'A', B = require 'B' }
如果您只想加载部分模块,可以这样做:
A = require "AandB".A