Question

Supposons que je sois l'insertion d'une chaîne dans une table comme suit:

table.insert(tbl, mystring)

et que mystring est généré par le remplacement de toutes les occurrences de "a" par "b" dans input:

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

La façon évidente de combiner les deux dans une déclaration ne fonctionne pas, parce que les rendements de gsub deux résultats:

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

qui, je suppose, est le prix payé pour supporter de multiples valeurs de retour. La question est, est-il une norme, intégrée façon de sélectionner seulement la première valeur de retour? Quand j'ai trouvé select je pensais que c'était exactement ce qu'il a fait, mais hélas, il en fait Selects tous de résultats N partir, et n'a donc pas d'aide dans ce scénario.

Maintenant, je sais que je peux définir ma propre select comme suit:

function select1(n, ...)
  return arg[n]
end

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

mais cela ne semble pas juste, car je pense d'une manière intégrée de le faire.

Alors, suis-je manque une construction intégrée? Dans le cas contraire, ce que les développeurs Lua ont tendance à utiliser une variable distincte pour extraire l'argument correct ou écrire leurs propres fonctions select1?

Était-ce utile?

La solution

Vous pouvez entourer l'expression par des parenthèses:

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

Cela permet de sélectionner uniquement le premier résultat.

Pour obtenir le nième résultat, vous pouvez utiliser select et l'entourer par des parenthèses:

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

Autres conseils

Mettre une expression en parenthèses comme ceci:

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

forcera une valeur de retour. Ou vous pouvez les attraper à la fois comme ceci:

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

ou mieux encore, prise factice pour enregistrer une variable:

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

Dans une ligne. ({ funct(args) })[n] retournerait le résultat n'th sans déclarer des variables nommées

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top