Domanda

Supponiamo che io sono l'inserimento di una stringa in una tabella come segue:

table.insert(tbl, mystring)

e che mystring è generato sostituendo tutte le occorrenze di "a" con "b" in input:

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

Il modo più ovvio per combinare i due in una dichiarazione non funziona, perché i rendimenti gsub due risultati:

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

, che, suppongo, è il prezzo pagato per il supporto di più valori di ritorno. La domanda è, c'è uno standard, built-in modo per selezionare solo il primo valore di ritorno? Quando ho trovato select ho pensato che era esattamente quello che ha fatto, ma purtroppo, in realtà di selezionare tutti risultati da N in poi, e quindi non aiuta in questo scenario.

Ora so che posso definire il mio select come segue:

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

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

, ma questo non sembra giusto, dal momento che mi aspetto un built-in modo di fare questo.

Quindi, mi manca un po 'built-in costrutto? In caso contrario, lo fanno gli sviluppatori Lua tendono ad usare una variabile separata per estrarre l'argomento corretto o scrivere i propri funzioni select1?

È stato utile?

Soluzione

È possibile circondare l'espressione tra parentesi:

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

In questo modo selezionare solo il primo risultato.

Per ottenere il risultato all'ennesima potenza, è possibile utilizzare select e surround tra parentesi:

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

Altri suggerimenti

Mettere un'espressione in parentesi in questo modo:

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

forzerà un valore di ritorno. Oppure si potrebbe prendere entrambi in questo modo:

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

o, meglio ancora, fermo fittizio per salvare una variabile:

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

In una sola riga:. ({ funct(args) })[n] sarebbe tornato il risultato n'th senza dichiarare alcuna variabile di nome

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top