所以在lua,我想导入一个模块。
我想拥有我的"多边形"在子文件夹中的lib,所以我像这样引用它
local polygon = require(' polygon.polygon')
然而,它需要另一个名为' delaunay'的模块,它检查主文件夹时无法找到它
有没有编辑我的图书馆,让它工作? (某种添加搜索路径的能力?)
由于
答案 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>