Najlepszy samouczek Lua iterator W 2024 r. W tym samouczku możesz dowiedzieć się Leki generyczne dla iteratora,bezpaństwowcem iterator,iterator Multi-state,
Iteracyjnej (iteracyjnej) jest to obiekt, który może być używany do przechodzenia przez część pojemnikową Standard Template bibliotece lub wszystkie elementy, adres każdego obiektu iteracyjnej przedstawia pojemnik określony
W Lua iterator jest typu wskaźnik struktury wsparcia, które mogą przechodzić przez każdy element kolekcji.
Leki generyczne dla zachowania we własnym wewnętrznym funkcji iteracyjny, w rzeczywistości, to ratuje trzy wartości: iteracyjny funkcji państwowych, stałe, zmienne kontrolne.
Leki generyczne dla iteracji zawiera zbiór par klucz / wartość, składnia jest następująca:
for k, v in pairs(t) do print(k, v) end
Powyższy kod, k, v zmienną wykazu; para (T) na liście wyrażeń.
Patrz następujące przykłady:
array = {"Lua", "Tutorial"} for key,value in ipairs(array) do print(key, value) end
Wyjście jest powyższy kod jest wykonywany:
1 Lua 2 Tutorial
Powyższe przykłady użyliśmy iteracyjny Ipairs funkcji Lua przewidzianych domyślnie.
Tutaj patrzymy na proces realizacji Fan:
, W Lua często używamy, aby opisać funkcję iterator, każde wywołanie tej funkcji zwraca następny element kolekcji. Lua iterator zawiera następujące dwa typy:
Bezpaństwowcem iterator odnosi się nie zachowuje żadnych iteratory państwowe, więc możemy użyć pętli bezpaństwowcem iterator uniknąć tworzenia zamknięcia wydać dodatkowe cenę.
Każda iteracja, funkcje iteracji są dwie zmienne (zmienne stanu i kontroli stała) wartość jako parametr nazywany jest bezpaństwowcem iterator używając tylko tych dwóch wartości, aby dostać się do następnego elementu.
Typowym przykładem takiej prostej bezstanowej iteracyjnej jest Ipairs, że przez każdy element tablicy.
Poniższy przykład używamy prostą funkcję do osiągnięcia iterator cyfrowej n do kwadratu:
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
Powyższy przykład wyjście jest:
1 1 2 4 3 9
Iteracyjny stan przejścia zawiera tabelę (podczas cyklu nie zmienia stan stały) i aktualny wskaźnik indeksu (zmienne Control), Ipairs i funkcja iteracyjna jest bardzo proste, możemy osiągnąć w 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
Gdy Lua wzywa Ipairs (a), aby rozpocząć cykl, zdobył trzy wartości: iteracyjny funkcji ITER, stały stan, sterowanie zmienną wartość początkową 0; następnie Lua wywołuje ITER (a, 0) zwraca 1, a [1] (o ile [1] = nil); druga iteracja zwraca ITER (1) zwraca 2, w [2] plplpl aż do pierwszego elementu nil.
W wielu przypadkach trzeba zachować wiele informacji o stanie iterator zamiast po prostu stwierdzić, stałych kontroli i zmienne, najprostszym sposobem jest użycie zamknięć, istnieje sposób, aby ująć wszystkie informacje państwowego w tabeli, jako iteracyjny status stałych, ponieważ w tym przypadku wszystkie informacje mogą być przechowywane w tabeli, to funkcja iteracyjny zwykle nie wymagają drugi parametr.
W poniższym przykładzie stworzyliśmy nasze własne iteratory:
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
Powyższy przykład wyjście jest:
Lua Tutorial
Powyższe przykłady widzimy, stosowanie zamknięć w obrębie funkcji elementIterator, obliczoną w celu osiągnięcia zadanej wielkości i wydajności każdego elementu.