1

Luaj 3.0 ライブラリを使用するプログラムがあり、含めたい lua スクリプトがいくつか見つかりましたが、それらはすべて lua ファイル システムとペンライトを必要とし、それらのライブラリを使用しようとするとエラーが発生します。

ルアジでそれらをどのように利用するべきか誰か知っていますか?

編集:もう少し情報が役立つかもしれません: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

それにはペンライト ライブラリが必要で、これには lua ファイルシステムが必要になるため、2 つをインストールしました。を実行しようとしても、Lua ファイルシステムがロードされていないことがテストでわかりましたlfs.currentdir()。試しglobals.load("local lfs = require \"lfs\"").call();ましたが、エラーも発生しました。

私の Lfs ライブラリは にあり/usr/lib/lua/5.2/lfs.so、ペンライトは にあり/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 に答える