Как загрузить Lua-Filesystem и Lua-Penlight в Luaj

1

У меня есть программа, использующая библиотеки Luaj 3.0, и я нашел некоторые сценарии lua, которые я хочу включить, но все они требуют файловой системы lua и penlight, и всякий раз, когда я пытаюсь использовать эти библиотеки, это приводит к ошибке.

Кто-нибудь знает, как я должен использовать тех, кто находится в Луаге?

Изменение: может помочь немного дополнительная информация: у меня есть 64-битная система Archlinux с открытым-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.

Теги:
lua
luaj
luajava
luafilesystem

1 ответ

0

Это проблема в Luaj 3.0 и Luaj 3.0 alpha 1.

Параметр lua package.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
  • 0
    Насколько я могу судить, ошибка была исправлена. В ветке, на которую вы ссылались, говорится, что они исправили это в бета-версии 1, и я посмотрел на источник, и похоже, что он использовал путь.
  • 0
    Я попробовал это, и это не сработало. Как я должен использовать require в любом случае, так как всякий раз, когда я пытаюсь вызвать любой из этих файлов напрямую, я получаю сообщение об ошибке.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню