Lua的require函数可以返回多个结果吗?

Goo*_*bus 17 lua

可以创建一个通过require函数返回多个结果的Lua模块吗?我正在编写package.loaders的扩展,我想知道我是否需要支持这种行为.

例如,采用以下模块,名为mod.lua:

print("module loading")
return "string1", "string2"
Run Code Online (Sandbox Code Playgroud)

以下脚本需要:

print("running script")
s1, s2 = require("mod")
print("s1: " .. tostring(s1))
print("s2: " .. tostring(s2))
Run Code Online (Sandbox Code Playgroud)

结果如下:

running script
module loading
s1: string1
s2: nil
Run Code Online (Sandbox Code Playgroud)

当我希望返回第二个字符串时.我不打算使用这样的行为,我意识到你可以通过返回一个表并解压缩它来复制它,我只是想知道它是否有意义(因为它是有效的Lua语法)而且我找不到在任何地方都有明确的答案.

And*_*sev 12

Lua 5.1.3
requirelua export static int ll_require (lua_State *L)loadlib.c文件中实现.此函数始终返回1作为堆栈上返回值的数量.

  • 是的,从源代码来看就是这样(我使用的是 Lua 5.2,它是相同的单个返回值)。我猜想这个限制部分是因为它将结果存储在`_LOADED["mod"]`中,并且如果不将它们打包在表中并再次解包,它就无法从那里返回多个值,这在大多数情况下是不必要的。 (2认同)

Pet*_*ith 12

您总是可以从模块返回一个函数,并返回多个值,如下所示:

foo.lua

return function() return "abc", 123 end
Run Code Online (Sandbox Code Playgroud)

bar.lua

local a, b = require "foo" ()
Run Code Online (Sandbox Code Playgroud)