¿Es posible crear un módulo Lua que devuelva resultados múltiples a través de la función require? Actualmente estoy escribiendo una extensión para package.loaders y quiero saber si necesito apoyar ese comportamiento.Can Lua's require function return multiple results?
Por ejemplo, tomemos el siguiente módulo, llamado mod.lua
:
print("module loading")
return "string1", "string2"
que es requerido por el siguiente script:
print("running script")
s1, s2 = require("mod")
print("s1: " .. tostring(s1))
print("s2: " .. tostring(s2))
Los resultados en la siguiente salida:
running script
module loading
s1: string1
s2: nil
Cuando esperaría que se devolviera la segunda cuerda. No busco usar ese tipo de comportamiento, y me doy cuenta de que puedes replicarlo devolviendo una tabla y desempacando eso, solo quiero saber si está destinado a funcionar (ya que es una sintaxis Lua válida) y no puedo encontrar un respuesta definitiva sobre esto en cualquier lugar.
Sí, parece de esa manera mirando la fuente (estoy en Lua 5.2 y es el mismo valor de retorno único). Supongo que la restricción se debe en parte a que almacena el resultado en '_LOADED [" mod "]' y no podría devolver múltiples valores desde allí sin empaquetarlos en una tabla y desempacarlos nuevamente, lo cual es innecesario en la mayoría de los casos. – GooseSerbus
@GooseSerbus También es porque 'require' modifica el valor de retorno. Si el módulo devuelve 'nil',' require' devuelve 'true' en su lugar. – finnw