Supongamos Estoy insertando una cadena en un cuadro como el siguiente:En Lua, ¿puedo seleccionar fácilmente el enésimo resultado sin funciones personalizadas?
table.insert(tbl, mystring)
y que mystring
se genera mediante la sustitución de todas las ocurrencias de "a" a "b" en input
:
mystring = string.gsub(input, "a", "b")
La obvia forma de combinar los dos en una declaración no funciona, porque gsub
devuelve dos resultados:
table.insert(tbl, string.gsub(input, "a", "b")) -- error!
-- (second result of gsub is passed into table.insert)
que, supongo, es el precio pagado por soportar múltiples valores devueltos. La pregunta es, ¿existe una forma incorporada estándar para seleccionar solo el primer valor de retorno? Cuando encontré select
, pensé que era exactamente lo que hacía, pero, por desgracia, en realidad selecciona todos los resultados de N en adelante, por lo que no ayuda en este escenario.
Ahora sé que puedo definir mi propia select
de la siguiente manera:
function select1(n, ...)
return arg[n]
end
table.insert(tbl, select1(1, string.gsub(input, "a", "b")))
pero esto no se ve bien, ya que cabe esperar de una manera integrada de hacer esto.
Entonces, ¿me falta algo de construcción incorporada? Si no, ¿los desarrolladores de Lua tienden a usar una variable separada para extraer el argumento correcto o escribir sus propias funciones select1
?
Gracias! Apuesto a que eventualmente me encontraré con la misma situación queriendo solo el segundo resultado, ¿qué opciones tengo entonces? –
@romkyns: actualicé mi publicación para responder. Aunque su función 'select1' puede ser más legible. – interjay
Me gusta usar dummies para esto, es decir '_, _, _, fourthVal, _ = giveMeFive()' Lo encuentro más legible de esa manera. – deorst