У меня есть программа, использующая библиотеки 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
.
Это проблема в 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