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
如何在Lua库中构造内部依赖关系?_Lua - Fatal编程技术网

如何在Lua库中构造内部依赖关系?

如何在Lua库中构造内部依赖关系?,lua,Lua,我正在努力弄清楚如何在我正在编写的Lua库中构造并使用内部依赖关系 我将我的库定义为: ./alib.lua ./alib/adependency.lua 以及守则: -- File: ./alib.lua local ad = require "alib.adependency" module( "alib") return {} -- File: ./alib/adependency.lua module( "adependency" ) return {} 这是一种享受: $ lua

我正在努力弄清楚如何在我正在编写的Lua库中构造并使用内部依赖关系

我将我的库定义为:

./alib.lua
./alib/adependency.lua
以及守则:

-- File: ./alib.lua
local ad = require "alib.adependency"
module( "alib")
return {}

-- File: ./alib/adependency.lua
module( "adependency" )
return {}
这是一种享受:

$ lua alib.lua
<no output>
以及新守则:

-- File: ./anapp.lua
local alib = require "lib.alib"
local print = print
module( "anapp")
print "Hello"
尝试运行它:

$ lua anapp.lua
lua: ./lib/alib.lua:2: module 'alib.adependency' not found:
    no field package.preload['alib.adependency']
    no file './alib/adependency.lua'
    no file '/usr/local/share/lua/5.1/alib/adependency.lua'
    no file '/usr/local/share/lua/5.1/alib/adependency/init.lua'
    no file '/usr/local/lib/lua/5.1/alib/adependency.lua'
    no file '/usr/local/lib/lua/5.1/alib/adependency/init.lua'
    no file '/usr/share/lua/5.1/alib/adependency.lua'
    no file '/usr/share/lua/5.1/alib/adependency/init.lua'
    no file './alib/adependency.so'
    no file '/usr/local/lib/lua/5.1/alib/adependency.so'
    no file '/usr/lib/x86_64-linux-gnu/lua/5.1/alib/adependency.so'
    no file '/usr/lib/lua/5.1/alib/adependency.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'
    no file './alib.so'
    no file '/usr/local/lib/lua/5.1/alib.so'
    no file '/usr/lib/x86_64-linux-gnu/lua/5.1/alib.so'
    no file '/usr/lib/lua/5.1/alib.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
    [C]: in function 'require'
    ./lib/alib.lua:2: in main chunk
    [C]: in function 'require'
    anapp.lua:2: in main chunk
    [C]: ?
哦,天哪。现在,我在库中进行手动编辑:

-- File: ./lib/alib.lua
-- local ad = require "alib.adependency" -- Doesn't work
local ad = require "lib.alib.adependency" -- Works
module( "alib")
return {}
它的工作原理是:

$ lua anapp.lua
Hello
Lua的
require()
似乎与Lua运行的最终脚本相关的路径,而不是调用
require()
的脚本


当然,每次向项目中添加Lua库时,您不必手动修复Lua库中的内部路径
require()
d。。。我也不知道从单元测试的角度来看这是如何工作的。我做错了什么?

我认为最干净的解决方案是让库保持原样,然后让使用库的人负责正确配置
包.path
。在您的设置中,这意味着应用程序应将lib文件夹添加到路径:

package.path = './lib/?.lua;' .. package.path

有关路径的更多信息,请参见相关问题,如以及。

Yes;或者,将lib安装在Lua默认路径的目录中,如
/usr/local/share/Lua/5.1/
package.path = './lib/?.lua;' .. package.path