Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在lua(love2D)中,我想在子文件夹中导入一个库,其中的文件将找不到它需要的下一个模块_Lua_Love2d - Fatal编程技术网

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

在lua(love2D)中,我想在子文件夹中导入一个库,其中的文件将找不到它需要的下一个模块,lua,love2d,Lua,Love2d,所以在lua中,我想导入一个模块 我想把我的“多边形”库放在一个子文件夹中,所以我像这样引用它 局部多边形=需要('polygon.polygon')) 但是,它需要另一个名为“delaunay”的模块,它无法找到它,因为它检查主文件夹 为了让它正常工作,我的库是否缺少编辑?(某种添加搜索路径的能力?) 无论如何,谢谢,看来您必须明确地处理子文件夹 与中一样,模块polygon必须将delaunay导入为polygon.delaunay 或模块名称必须附加到package.path,以便lua可

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

我想把我的“多边形”库放在一个子文件夹中,所以我像这样引用它

局部多边形=需要('polygon.polygon'))

但是,它需要另一个名为“delaunay”的模块,它无法找到它,因为它检查主文件夹

为了让它正常工作,我的库是否缺少编辑?(某种添加搜索路径的能力?)


无论如何,谢谢,看来您必须明确地处理子文件夹

与中一样,模块
polygon
必须将
delaunay
导入为
polygon.delaunay

或模块名称必须附加到package.path,以便lua可以在子文件夹中搜索文件名:

package.path=package.path..";./polygon/?.lua"
更多信息是

注释中指出,您可能希望确保路径连接只发生一次。 此外,人们应该警惕名字的阴影


最后,当我们在回顾过去的时候,一个非常巧妙的解决方法在问题出现的五年前被提出了。

要知道在哪里寻找模块,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函数look for
/polygon/delaunay.lua
。请记住,在
require
字符串中,
就文件搜索而言表示分隔符,因此在此场景中调用
require“polygon.delaunay”
将意味着搜索
/polygon/polygon/delaunay.lua


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

所有加载到
包中的内容。加载的
可以与
require()
一起加载,因为
require()
首先在
包中查找。加载的

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

提供有关文件夹结构的错误消息和详细信息Lua在支持模块的相对路径方面存在问题。如果delaunay位于polygon子文件夹中,则可以使用require('polygon.delauny')。更好的解决方案可能是确保这两个文件都可以通过package.path(如其他答案中所述)找到,并且只使用require('polygon')和require('delaunay')。这样,如果要更改目录结构,只需更改package.path。您可以在windows和unix系统的path/cpath中使用“/”作为分隔符。这是个坏主意。package.path是全局的。每一个请求,这段代码都会无限地执行和连接。最后,它会爆炸。我在PROD中使用此代码的经验不好。请改用lua\u包路径。读这篇文章也是个坏主意。package.path是全局的。每一个请求,这段代码都会无限地执行和连接。最后,它会爆炸。我在PROD中使用此代码的经验不好。请改用lua\u包路径。也请阅读本文@uwevil我不确定web服务是如何工作的,但在LÖVE2D中,您可以将此代码放入
love.load()
函数中,该函数在程序初始化时只运行一次。从谷歌看来,
lua\u package\u path
是nginx特有的特性。