1

我有一个使用 Luaj 3.0 库的程序,我发现了一些我想包含的 lua 脚本,但它们都需要 lua 文件系统和 penlight,每当我尝试使用这些库时,它都会出错。

有谁知道我应该如何利用 Luaj 中的那些?

编辑:更多信息可能会有所帮助:我是 Archlinux 64 位系统,安装了 open-jdk8 Luaj、lua-filesystem 和 lua-penlight。我找到了一组名为Lua Java Utils的库,我想将其包含在我的项目中。但它总是得到这个错误:

@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 库,而后者又需要 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

4

1 回答 1

0

这是 Luaj 3.0 和 Luaj 3.0 alpha 1 中的一个问题。

lua package.path 在需要模块时被忽略。这是一个锻炼。

您可以覆盖 require 函数:

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
于 2014-08-29T08:37:56.630 回答