如何在Luaj中加载Lua-Filesystem和Lua-Penlight。

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

有人知道我应该如何在Luaj中使用它们吗?

编辑: 更多的信息可能会有所帮助: 我有一个安装了open-jdk8 Luaj,lua-filesystem和lua-penlight的Archlinux 64位系统。我发现了一个称为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库,而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

点赞
用户2248354
用户2248354

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

在需要模块时,Lua 包路径被忽略了。这里提供了解决方案。

您可以覆盖 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-29 08:37:56