Latest web development tutorials

Lua iteratore

Iterator (iterator) è un oggetto che può essere usato per attraversare la parte contenitore Standard Template Library o tutti gli elementi, l'indirizzo di ciascun oggetto iteratore rappresenta un contenitore determinata

In Lua iteratore è un tipo di puntatore di struttura di supporto, che può attraversare ogni elemento della collezione.


Generics per iteratore

Generics per la conservazione in una propria funzione iterativa interna, infatti, risparmia tre valori: una funzione iterativa, costanti stato, variabili di controllo.

Generics per l'iterazione fornisce una serie di coppie chiave / valore, la sintassi è la seguente:

for k, v in pairs(t) do
    print(k, v)
end

Il codice di cui sopra, k, V Elenco variabili; coppia (t) per la lista di espressioni.

Vedere i seguenti esempi:

array = {"Lua", "Tutorial"}

for key,value in ipairs(array) 
do
   print(key, value)
end

L'uscita è il codice precedente viene eseguito:

1  Lua
2  Tutorial

Gli esempi di cui sopra abbiamo usato il ipairs funzione iterativi Lua forniti per default.

Qui guardiamo l'iter per l'esecuzione di Fan:

  • Innanzitutto, l'inizializzazione, calcolato valore dopo una espressione, l'espressione deve restituire per nell'intervallo richiesto di tre valori: una funzione iterativa, costanti stato, variabili di controllo, e assegnazione a più valori, il numero di risultati se l'espressione restituisce inferiore a tre con punti nil faranno automaticamente, la parte in più verrà ignorato.
  • In secondo luogo, le costanti di stato e variabile di controllo come parametro per chiamare la funzione iterator (Nota: per la struttura, le costanti di stato inutile, basta avere i suoi valori quando inizializzato e passato alla funzione di iterazione).
  • In terzo luogo, la funzione restituisce il valore di iterazione alla lista variabili.
  • In quarto luogo, se il valore restituito zero nel primo fine del ciclo, altrimenti il ​​corpo del ciclo.
  • In quinto luogo, la chiamata alla seconda funzione passo di iterazione di nuovo

. In Lua usiamo spesso per descrivere la funzione iteratore, ogni chiamata a questa funzione restituisce l'elemento successivo della collezione. Lua iteratore contiene i seguenti due tipi:

  • iteratore Stateless
  • iteratore multi-stato

iteratore Stateless

iteratore Stateless si riferisce non trattiene alcun iteratori di stato, in modo da poter utilizzare il ciclo iteratore apolide evitare di creare chiusure spendono supplemento di prezzo.

Ogni iterazione, le funzioni di iterazione sono due variabili (stato e di controllo variabili costanti) valore come parametro viene chiamato un iteratore stateless utilizzando solo questi due valori per ottenere l'elemento successivo.

Un tipico esempio di una semplice iteratore tale stateless è ipairs, che attraverso ogni elemento della matrice.

L'esempio seguente si usa una funzione semplice per raggiungere l'iteratore, digitale n quadrato:

function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

for i,n in square,3,0
do
   print(i,n)
end

L'output sopra esempio è:

1	1
2	4
3	9

Iterativo stato attraversamento include una tabella (durante il ciclo non cambia lo stato costante) e l'indice di indice corrente (variabili di controllo), ipairs e la funzione iterativa è molto semplice, siamo in grado di realizzare in Lua:

function iter (a, i)
    i = i + 1
    local v = a[i]
    if v then
       return i, v
    end
end
 
function ipairs (a)
    return iter, a, 0
end

Quando Lua chiama ipairs (a) per avviare il ciclo, ha acquisito tre valori: una funzione iter iterativa, uno stato di costante, la variabile di controllo del valore iniziale pari a 0, poi Lua chiama iter (a, 0) restituisce 1, un [1] (a meno che un [1] = nil); la seconda iterazione chiama iter (a, 1) restituisce 2, a [2] ...... fino al primo elemento nullo.


iteratore multi-stato

In molti casi, la necessità di preservare la pluralità di informazioni di stato iteratore piuttosto che semplicemente indicare costanti di controllo e variabili, il modo più semplice è quello di utilizzare le chiusure, vi è un modo per incapsulare tutte le informazioni di stato in una tabella, la tabella come iterativo lo stato delle costanti, perché in questo caso tutte le informazioni possono essere memorizzate nella tabella, funzione in modo iterativo di solito non è necessario il secondo parametro.

Il seguente esempio abbiamo creato il nostro iteratori:

array = {"Lua", "Tutorial"}

function elementIterator (collection)
   local index = 0
   local count = #collection
   -- 闭包函数
   return function ()
      index = index + 1
      if index <= count
      then
         --  返回迭代器的当前元素
         return collection[index]
      end
   end
end

for element in elementIterator(array)
do
   print(element)
end

L'output sopra esempio è:

Lua
Tutorial

Gli esempi sopra possiamo vedere, l'uso di chiusure all'interno funzione elementIterator, calcolata per ottenere la dimensione set e l'uscita di ogni elemento.