Pregunta

Supongamos Estoy insertando una cadena en un cuadro como el siguiente:

table.insert(tbl, mystring)

y que mystring se genera mediante la sustitución de todas las ocurrencias de "a" con "b" en input:

mystring = string.gsub(input, "a", "b")

La forma más obvia de combinar la declaración de dos en uno que no funciona, porque los rendimientos gsub dos resultados:

table.insert(tbl, string.gsub(input, "a", "b"))  -- error!
-- (second result of gsub is passed into table.insert)

lo que, supongo, es el precio pagado por el apoyo a múltiples valores de retorno. La pregunta es, ¿existe un estándar, una función de modo de seleccionar sólo el primer valor de retorno? Cuando encontré select pensé que era exactamente lo que hizo, pero por desgracia, en realidad, selecciona los todos Resultados de N en adelante, y así 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 yo esperaría un sistema incorporado en forma de hacerlo.

Por lo tanto, me estoy perdiendo algo de una función de construcción? Si no es así, los desarrolladores Lua tienden a utilizar una variable separada para extraer el argumento correcto o escribir sus propias funciones select1?

¿Fue útil?

Solución

Se puede rodear la expresión entre paréntesis:

table.insert(tbl, (string.gsub(input, "a", "b")))

Esto seleccionará sólo el primer resultado.

Para obtener el resultado enésima, puede utilizar select y rodearlo de paréntesis:

func1( (select(n, func2())) )

Otros consejos

Poner una expresión en paréntesis, así:

table.insert(tbl, (string.gsub(input, "a", "b")))

forzará un valor de retorno. O bien, podría atraparlos tanto como esto:

str,cnt = string.gsub(input, "a", "b")
table.insert(tbl, str)

o, mejor aún, la captura simulada para salvar una variable:

str,_ = string.gsub(input, "a", "b")
table.insert(tbl, str)

En una línea:. ({ funct(args) })[n] devolvería el resultado enésimo sin declarar ninguna variable de nombre

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top