2012-02-27 13 views
14

È possibile creare un modulo Lua che restituisce più risultati tramite la funzione di richiesta? Attualmente sto scrivendo un'estensione per package.loaders e voglio sapere se ho bisogno di supportare tale comportamento.È possibile che la funzione Lua richieda più risultati?

Per esempio, prendete il seguente modulo, chiamato mod.lua:

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

che è richiesto dal seguente script:

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

risultati nel seguente output:

running script 
module loading 
s1: string1 
s2: nil 

Quando mi aspetterei che la seconda stringa venga restituita. Non sto cercando di usare un simile comportamento, e mi rendo conto che potresti replicarlo restituendo un tavolo e scompattandolo, voglio solo sapere se è pensato per funzionare (dato che è una sintassi Lua valida) e non riesco a trovare un risposta definitiva su questo ovunque.

risposta

10

Lua 5.1.3
require lua esportazione implementato in static int ll_require (lua_State *L) in loadlib.c file. Questa funzione restituisce sempre 1 come numero di valori restituiti nello stack.

+1

Sì, sembra in questo modo guardando la fonte (sono su Lua 5.2 ed è lo stesso valore di ritorno singolo). Immagino che la restrizione sia in parte perché memorizza il risultato in '_LOADED [" mod "]' e non sarebbe in grado di restituire più valori da lì senza comprimerli in una tabella e decomprimerli di nuovo che non è necessario nella maggior parte dei casi. – GooseSerbus

+1

@GooseSerbus È anche perché 'require' modifica il valore di ritorno. Se il modulo restituisce 'nil',' require' restituisce 'true' invece. – finnw

8

Si può sempre restituire una funzione dal modulo e hanno che restituiscono più valori, come di seguito:

foo.lua

return function() return "abc", 123 end 

bar.lua

local a, b = require "foo"() 
Problemi correlati