我可以在 LuaJIT 中使用 ffi.load 加载多个库吗?
Can i load multiple libraries with ffi.load in LuaJIT?
LuaJIT 是否可以同时加载多个库ffi.load?
这样的东西可行吗?
local ffi = require("ffi")
local bor = require("bit").bor
ffi.cdef([[
// C bindings from each library!
]])
return ffi.load(bor("lib1", "lib2", "lib3"))
由于 LuaJIT FFI 库的工作方式,您无法真正将多个库导入单个用户数据。
您唯一可以轻松做的就是在受保护的调用中调用 userdata getter,因为 LuaJIT FFI 在未定义的符号上抛出错误,并循环要获取的每个库。
local function get(t, k)
return t[k]
end
local superlib = setmetatable({
ffi.load "a",
ffi.load "b",
ffi.load "c"
}, {
__index = function (self, k, v)
for _,l in ipairs(self) do
local status, val = pcall(get, l, k)
if status then
return val
end
end
end
})
LuaJIT 是否可以同时加载多个库ffi.load?
这样的东西可行吗?
local ffi = require("ffi")
local bor = require("bit").bor
ffi.cdef([[
// C bindings from each library!
]])
return ffi.load(bor("lib1", "lib2", "lib3"))
由于 LuaJIT FFI 库的工作方式,您无法真正将多个库导入单个用户数据。 您唯一可以轻松做的就是在受保护的调用中调用 userdata getter,因为 LuaJIT FFI 在未定义的符号上抛出错误,并循环要获取的每个库。
local function get(t, k)
return t[k]
end
local superlib = setmetatable({
ffi.load "a",
ffi.load "b",
ffi.load "c"
}, {
__index = function (self, k, v)
for _,l in ipairs(self) do
local status, val = pcall(get, l, k)
if status then
return val
end
end
end
})