我有一个使用Luaj 3.0库的程序,我找到了一些我想包含的lua脚本,但它们都需要lua文件系统和penlight,每当我尝试使用这些库时,都会出现错误。
有人知道我应该如何利用Luaj的那些吗?
编辑:更多信息可能会有所帮助:我有一个Archlinux 64位系统,安装了openjdk8Luaj、lua文件系统和lua penlight。我发现了一组名为LuaJavaUtils的库,我想将其包含在我的项目中。但它总是会出现这样的错误:
@luaJavaUtils/import.lua:24 index expected, got nil
第24行参考:
local function import_class (classname,packagename)
local res,class = pcall(luajava.bindClass,packagename)
if res then
_G[classname] = class
local mt = getmetatable(class)
mt.__call = call -- <----- Error Here
return class
end
end
它需要penlight库,而penlight库又需要lua文件系统,这就是我安装这两个文件系统的原因。通过测试,我发现Lua文件系统并没有通过尝试运行lfs.currentdir()
来加载。我尝试了globals.load("local lfs = require "lfs"").call();
,但它也出现了错误。
我的Lfs库位于/usr/lib/lua/5.2/lfs.so
,penlight位于/usr/share/lua/5.2/pl
。
这是Luaj 3.0和Luaj 3.0alpha 1中的一个问题。
lua软件包.path在需要模块时被忽略。这是一项训练。
您可以覆盖所需功能:
local oldReq = require
function require(f)
local fi = io.open(f, "r")
local fs = f
if not fi then
fi = io.open(f .. ".lua", "r")
fs = f .. ".lua"
if not fi then
error("Invalid module " .. f)
return
end
end
local l = loadfile(fs)
if not l then
return oldReq(f)
end
return l()
end