什么';s在lua中不同,要求路径为/&引用;或“不”&引用;

什么';s在lua中不同,要求路径为/&引用;或“不”&引用;,lua,require,Lua,Require,我看到一些lua代码以两种方式使用requirepath。 例如: 所以我想知道上面有什么不同。 我们可以在程序中同时使用这两种方法吗?简单的方法是在Lua控制台中这样做Lua-i-So >lua -i Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio > require("a/b/c") stdin:1: module 'a/b/c' not found: no field package.prelo

我看到一些lua代码以两种方式使用requirepath。 例如:

所以我想知道上面有什么不同。
我们可以在程序中同时使用这两种方法吗?

简单的方法是在Lua控制台中这样做
Lua-i
-So

>lua -i
Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio
> require("a/b/c")
stdin:1: module 'a/b/c' not found:
    no field package.preload['a/b/c']
    no file '/usr/local/share/lua/5.3/a/b/c.lua'
    no file '/usr/local/share/lua/5.3/a/b/c/init.lua'
    no file '/usr/local/lib/lua/5.3/a/b/c.lua'
    no file '/usr/local/lib/lua/5.3/a/b/c/init.lua'
    no file './a/b/c.lua'
    no file './a/b/c/init.lua'
    no file '/usr/local/lib/lua/5.3/a/b/c.so'
    no file '/usr/local/lib/lua/5.3/loadall.so'
    no file './a/b/c.so'
stack traceback:
    [C]: in function 'require'
    stdin:1: in main chunk
    [C]: in ?
> require("a.b.c")
stdin:1: module 'a.b.c' not found:
    no field package.preload['a.b.c']
    no file '/usr/local/share/lua/5.3/a/b/c.lua'
    no file '/usr/local/share/lua/5.3/a/b/c/init.lua'
    no file '/usr/local/lib/lua/5.3/a/b/c.lua'
    no file '/usr/local/lib/lua/5.3/a/b/c/init.lua'
    no file './a/b/c.lua'
    no file './a/b/c/init.lua'
    no file '/usr/local/lib/lua/5.3/a/b/c.so'
    no file '/usr/local/lib/lua/5.3/loadall.so'
    no file './a/b/c.so'
    no file '/usr/local/lib/lua/5.3/a.so'
    no file '/usr/local/lib/lua/5.3/loadall.so'
    no file './a.so'
stack traceback:
    [C]: in function 'require'
    stdin:1: in main chunk
    [C]: in ?
>
请注意,这出现在带有
a.b.c
的输出中,但不是
a/b/c

    no file '/usr/local/lib/lua/5.3/a.so'
    no file '/usr/local/lib/lua/5.3/loadall.so'
    no file './a.so'
…这能回答你的问题吗

试试这个


我认为这无关紧要。更方便的是,您不必处理正斜杠和反斜杠。
require
调用的参数是模块名,而不是没有文件扩展名的模块文件的路径。这就是为什么第一个坏了,第二个没问题。对于基于C的模块来说,这一点变得很明显,其中模块名称不仅用于查找共享库(斜杠可能会起作用),而且还用于派生要从该库加载的符号的名称(斜杠肯定不会起作用)。如果需要斜杠,请将它们放在
package.path
(或
package.cpath
)中。
no file'/usr/local/lib/lua/5.3/loadall.so'
同时出现在这两个文件中。是的,就像
init.lua
一样,如果它们存在,则会被加载。像旧[dos]上的autoexec.bat和config.sys一样,不,我的意思是它在您的
列表中。注意,它出现在带有a.b.c的输出中,但不是a/b/c:
但同时出现在这两个列表中,技术信息在
'a.b.c'
中出现两次,因此如果您将其保留在列表中,我可以理解该注释不是我写的-它是@Joseph Sible Restore Monica编辑的-可能是监督的?我将其包括在内,因为它出现的时间过长,并且是仅在
a.b.c
中出现的块的一部分。如果您认为只包含另外两行更有意义,请随意将其更改为该行。
    no file '/usr/local/lib/lua/5.3/a.so'
    no file '/usr/local/lib/lua/5.3/loadall.so'
    no file './a.so'
>lua -i
Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio
> dump=function(dump) for key,value in pairs(dump) do io.write(string.format("%s = %s\n",key,value)) end
>> end
> dump(package.preload)
> package.preload["a.b.c"]=function() return "WHATSUP" end
> dump(package.loaded)
package = table: 0x56614f00
io = table: 0x56615860
math = table: 0x56616ce0
os = table: 0x56615f40
coroutine = table: 0x566153a0
bit32 = table: 0x56618730
debug = table: 0x56618350
utf8 = table: 0x56617880
string = table: 0x566166b0
_G = table: 0x566136d0
table = table: 0x56615640
> require("a.b.c")
WHATSUP
> dump(package.loaded)
package = table: 0x56614f00
io = table: 0x56615860
math = table: 0x56616ce0
os = table: 0x56615f40
coroutine = table: 0x566153a0
a.b.c = WHATSUP
bit32 = table: 0x56618730
debug = table: 0x56618350
utf8 = table: 0x56617880
string = table: 0x566166b0
_G = table: 0x566136d0
table = table: 0x56615640
> ;-)