Ответ 1
Lua 5.1.3 require
Экспорт lua реализован в static int ll_require (lua_State *L)
в loadlib.c
файле. Эта функция всегда возвращает 1 как количество возвращаемых значений в стеке.
Можно создать модуль Lua, который возвращает несколько результатов через функцию require? В настоящее время я пишу расширение для package.loaders, и я хочу знать, нужно ли мне поддерживать такое поведение.
Например, возьмите следующий модуль с именем mod.lua
:
print("module loading")
return "string1", "string2"
Требуется следующее script:
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.1.3 require
Экспорт lua реализован в static int ll_require (lua_State *L)
в loadlib.c
файле. Эта функция всегда возвращает 1 как количество возвращаемых значений в стеке.
Вы всегда можете вернуть функцию из своего модуля и вернуть несколько значений, например ниже:
foo.lua
return function() return "abc", 123 end
bar.lua
local a, b = require "foo" ()
Иногда может быть предпочтительнее вернуть "таблицу", если записи, в зависимости от того, что вам нужно вернуть.
- - - - - Parent.Lua - - - - -
local ChildReturns=require("Child");
print("The favourite toy is "..ChildReturns.GetFavourieToy());
print("List ALL toys on the child favourites list:-");
for F_vK,F_vV in ipairs(ChildReturns) do
print(F_vK,F_vV);
end
- - - - - Parent.Lua - - - - -
local ChildReturns=require("Child");
print("The favourite toy is "..ChildReturns.GetFavourieToy());
print("List ALL toys on the child favourites list:-");
for F_vK,F_vV in ipairs(ChildReturns) do
print(F_vK,F_vV);
end
== == == ==
The favourite toy is Lego
List ALL toys on the child favourites list:-
1 Lego
2 Meccano
А при необходимости можно даже использовать команду "распаковать".