Tengo una función lua que toma múltiples parámetros y devuelve tantos valores como parámetros hay. Cada valor de retorno corresponde a un parámetro. Como ejemplo, consideremos una función que lee el valor de un par clave/valor a partir de una base de datos:Práctica recomendada para devolver un error de una función lua que devuelve valores múltiples
val1, val2, val3 = my_function("key1", "key2", "key3");
val1 = my_function("key1");
¿Cuál es la mejor manera de devolver un error de my_function
? (por ejemplo, si la "clave" suministrada no es válida)
Entiendo que una forma es devolver dos valores en caso de error, nil
y una cadena de error. ¿Es este el mejor enfoque? Por ejemplo:
val1, val2, val3 = my_function("key1", "key2", "key3");
if val1 then
-- Use val1, val2, and val3.
else
print("ERROR: " .. val2);
end
Editar
algunos puntos adicionales:
- El script lua se está ejecutando dentro de un programa C usando
lua_pcall()
. - El programa C no debe interrumpirse si el script falla.
my_function()
se implementa en C- Cuando
my_function()
falla, sino que también debe devolver un código de error (o mensaje) que indica la razón por la que falló.
He editado la pregunta para aclarar algunos puntos. Dado que la secuencia de comandos lua (que eventualmente llama a 'my_function()') se ejecuta desde C con 'lua_pcall()', ¿debe 'my_function()' devolver una variable "ok" como describió anteriormente? (por ejemplo, 'ok, val1, val2, val3 = my_function()'). – Ben
@Ben, sí, incluiría un valor 'ok' adicional, que parece ser la manera más limpia. También recomendaría una revisión en el diseño; ya que ambas funciones están en C, probablemente será más simple (y más rápido) olvidarse de Lua y simplemente hacer todo en C. – kikito
@kikto, gracias por aclarar. En este caso, definitivamente tiene sentido para mí usar lua (o un equivalente) para extender el producto. – Ben