È 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.
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
@GooseSerbus È anche perché 'require' modifica il valore di ritorno. Se il modulo restituisce 'nil',' require' restituisce 'true' invece. – finnw