2014-08-29 131 views
1

我有一個使用Luaj 3.0庫的程序,我發現了一些我想包含的Lua腳本,但它們都需要Lua文件系統和penlight,並且每當我嘗試使用這些庫,它給出了一個錯誤。如何在Luaj中加載Lua-Filesystem和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 

它需要的筆形電筒庫,又需要LUA文件系統,這就是爲什麼我安裝的兩個。我通過測試發現,通過嘗試運行lfs.currentdir(),Lua文件系統未加載。我試過globals.load("local lfs = require \"lfs\"").call();,但它也給出了一個錯誤。

我的Lfs庫位於/usr/lib/lua/5.2/lfs.so,筆電位於/usr/share/lua/5.2/pl

回答

0

這是在Luaj 3.0和3.0 Luaj阿爾法1.

的LUA package.path一個問題,同時需要一個模塊被忽略。 Here's a workout for this.

您可以覆蓋需要的功能:

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 
+0

至於我可以告訴大家,錯誤是固定的。在你鏈接到的線程中,他們說他們在beta 1中修復了這個問題,然後我查看了源代碼,看起來它正在使用路徑。 – user2752635 2014-08-29 13:02:54

+0

我試過了,它沒有工作。無論如何,我應該如何使用它,因爲每當我嘗試直接調用這些文件時,都會出現錯誤。 – user2752635 2014-08-29 18:51:17

+0

@ user2752635從我查看LuaJ的官方網頁,不支持C/C++庫,正如您在上面定義的那樣,您試圖加載一個在LuaJ中不可能的UNIX庫。 LuaJ和C API之間沒有任何關係。 '圖書館的編碼要與標準lua文檔中指定的行爲緊密匹配,以獲得關於圖書館API的詳細信息。 - 當仔細查看項目時,圖書館就像LuaC API一樣,但不是LuaC本身。並非Lua API的所有庫都可用於LuaJ。很遺憾,無法加載操作系統指定的庫。 – 111WARLOCK111 2014-08-30 07:30:14