在lua(love2D)中,我想在子文件夹中导入一个库,那里的文件找不到它需要的下一个模块

时间:2017-08-08 17:07:22

标签: lua love2d

所以在lua,我想导入一个模块。

我想拥有我的"多边形"在子文件夹中的lib,所以我像这样引用它

local polygon = require(' polygon.polygon')

然而,它需要另一个名为' delaunay'的模块,它检查主文件夹时无法找到它

有没有编辑我的图书馆,让它工作? (某种添加搜索路径的能力?)

由于

3 个答案:

答案 0 :(得分:1)

要知道在哪里查找模块,Lua的require使用变量package.path(。lua)和package.cpath(.so / .dll)。您可以在程序中更改它们以查看您所拥有的目录。为了保持一致性,您可以查看其内容以了解要使用的特定于操作系统的分隔符。例如:

local sep = package.path:find("\\") and "\\" or "/"
package.path = package.path .. ";." .. sep .. "polygon" .. sep .. "?.lua"

这会在搜索路径中包含./polygon/?.lua,因此除了现有路径之外,对require "delaunay"的调用将使{require}查找./polygon/delaunay.lua。请注意,在require字符串中,.表示与文件搜索相关的分隔符,因此在此方案中调用require "polygon.delaunay"将意味着搜索./polygon/polygon/delaunay.lua

根据我对您的问题的理解,更改package.path变量以包含存储delaunay库的路径将解决您的问题,但为特定解决方案提供有关项目的更多信息和目录结构是必需的。

答案 1 :(得分:0)

您可以附加您的子文件夹'命名为package.path,以便lua可以找到它们:

package.path=package.path..";./polygon/?.lua"

或者您可以尝试使用dofile使用自定义加载程序。无论如何,您必须明确处理子文件夹。更多信息是here

答案 2 :(得分:0)

所有装入package.loaded的内容都可以用require()装入,因为require()package.loaded中排在首位...

-- Lua 5.3 ( lua -i )
> package.loaded.code=load(code.dump)()
> test=require('code')
> test
function: 0x565cb820

因此您可以使用load()loadfile('/path/to/your_code.lua')来执行此操作。此方法的另一个不错的功能是加载转储的代码...

> package.loaded.shell=loadfile('shell.bin')
> shell=require('shell')
> shell('cat shell.bin')
uaS�
�
xV(w@F@�d�@��F�@G���d@��F�@G���d@&�typestringoexecute
/bin/bash>