2012-02-27 4 views
14

require関数で複数の結果を返すLuaモジュールを作成することは可能ですか?私は現在、package.loadersの拡張を書いています。このような動作をサポートする必要があるかどうかを知りたいのです。Luaのrequire関数は複数の結果を返すことができますか?

たとえば、mod.luaという名前の次のモジュールを取る:次の出力で

print("running script") 
s1, s2 = require("mod") 
print("s1: " .. tostring(s1)) 
print("s2: " .. tostring(s2)) 

結果::

running script 
module loading 
s1: string1 
s2: nil 

print("module loading") 
return "string1", "string2" 

を次のスクリプトによって必要とされます私は2番目の文字列が返されると思います。私はそのような振る舞いを使うつもりはないし、テーブルを返して展開することでそれを複製することができることを認識しています。(それが有効なLua構文であるので)動作するかどうかを知りたいだけです。どこでもこの決定的な答え。

答えて

10

のLua 5.1.3
requireloadlib.cファイルにstatic int ll_require (lua_State *L)に実装Luaの輸出。この関数は、スタックに返される値の数として常に1を返します。

+1

をうん、それが見えますその方法でソースを見ています(私はLua 5.2で、同じ戻り値です)。私は制限があるのは、結果が '_LOADED [" mod "]'に格納されているためだと思います。テーブルから複数の値を返すことはできず、ほとんどの場合は不要です。 – GooseSerbus

+1

@GooseSerbusこれは 'require'が戻り値を変更するためです。モジュールが 'nil'を返す場合、' require'は代わりに 'true'を返します。 – finnw

8

あなたは、常に以下のように、複数の値を返すこと、あなたのモジュールから関数を返すと持つことができ:

foo.lua

return function() return "abc", 123 end 

bar.lua

local a, b = require "foo"() 
関連する問題