可以創建一個通過require函數返回多個結果的Lua模塊?我目前正在爲package.loaders寫一個擴展,我想知道是否需要支持這樣的行爲。Can Lua的require函數可以返回多個結果嗎?
例如,採取以下模塊,名爲mod.lua
:
print("module loading")
return "string1", "string2"
這是由下面的腳本需要:
print("running script")
s1, s2 = require("mod")
print("s1: " .. tostring(s1))
print("s2: " .. tostring(s2))
結果在下面的輸出:
running script
module loading
s1: string1
s2: nil
當我期望第二個字符串被返回。我不想使用這樣的行爲,我意識到你可以通過返回一個表並解包來複制它,我只想知道它是否有用(因爲它是有效的Lua語法),而且我找不到在這個任何地方的確切答案。
呀,它看起來通過這種方式查看源代碼(我在Lua 5.2上,它是相同的單一返回值)。我想這個限制的部分原因是它將結果存儲在'_LOADED [「mod」]中,並且不能從那裏返回多個值,而無需將它們打包在表中並再次解包,這在大多數情況下是不必要的。 – GooseSerbus 2012-02-27 19:20:16
@GooseSerbus這也是因爲'require'修改了返回值。如果模塊返回'nil','require'將返回'true'。 – finnw 2012-02-27 23:46:20