2012-02-27 16 views
14

Gereksinim fonksiyonu ile birden çok sonuç döndüren bir Lua modülü oluşturmak mümkün mü? Şu anda package.loaders için bir uzantı yazıyorum ve bu davranışı desteklemem gerekip gerekmediğini bilmek istiyorum.Can Lua'nın işlevi birden çok sonuç döndürmesini gerektiriyor mu?

Örneğin, mod.lua adlı aşağıdaki modülü, atın: Aşağıdaki çıktıda

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

Sonuçlar::

running script 
module loading 
s1: string1 
s2: nil 

aşağıdaki komut dosyası tarafından gerekli

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

İkinci dizenin döndürülmesini beklerdim. Böyle bir davranışı kullanmak istemiyorum ve bir tabloyu iade ederek ve paketini açarak çoğaltabileceğinizi anlıyorum, sadece işe yaramayacağını bilmek istiyorum (geçerli Lua sözdizimi olduğu gibi) ve bulamıyorum. Bu konuda her yerde kesin cevap.

cevap

10

Lua 5.1.3
require lua ihracat loadlib.c dosyada static int ll_require (lua_State *L) uygulanan. Bu işlev, her zaman yığıntaki döndürülen değerlerin sayısı olarak 1 döndürür.

Her zaman modülünden bir işlev dönebilir ve bu dönüş birden fazla değere sahip, aşağıda gibi olabilir
+1

Evet, görünüşe

return function() return "abc", 123 end 

bar.lua Bu şekilde kaynağa bakıyorum (Lua 5.2'de yaşıyorum ve aynı tek geri dönüş değeri). Kısıtlama, kısmen, sonucu "_LOADED [" mod "]' da sakladığından ve çoğu durumda gereksiz olan bir tabloyu paketlemeden ve bir kez daha açmadan, oradan çok sayıda değer döndüremeyeceği sanırım. – GooseSerbus

+1

@GooseSerbus Ayrıca, 'require' dönüş değerini değiştirdiği için de geçerli. Modül 'nil' döndürürse,' require' yerine 'true' döndürür. – finnw

8

:

foo.lua

local a, b = require "foo"() 
İlgili konular