Лучшее руководство по Lua итератора в 2024 году. В этом руководстве вы можете изучить Дженерики для итератора,Лица без итератора,Multi-состояние итератора,
Итератора (итератор) это объект, который может быть использован для обхода части контейнера стандартной библиотеки шаблонов или все элементы, адрес каждого объекта итератора представляет собой контейнер, определяемый
В Lua итератора является указатель типа структуры поддержки, которая может пройти через каждый элемент коллекции.
Дженерики для сохранения в своей собственной внутренней итеративной функции, на самом деле, она сохраняет три значения: итеративный функции, государственные константы, управляющие переменные.
Дженерики для итерации предоставляет набор пар ключ / значение, синтаксис выглядит следующим образом:
for k, v in pairs(t) do print(k, v) end
Приведенный выше код, K, V список переменных; пара (Т) для списка выражений.
Смотрите следующие примеры:
array = {"Lua", "Tutorial"} for key,value in ipairs(array) do print(key, value) end
Выход выше код выполняется:
1 Lua 2 Tutorial
Приведенные выше примеры, которые мы использовали итерационные функции ipairs Lua, предоставляемые по умолчанию.
Здесь мы рассмотрим процесс для исполнения вентилятора:
, В Lua мы часто используем для описания функции итератора, каждый вызов этой функции возвращает следующий элемент коллекции. Lua итератора содержит следующие два типа:
Stateless итератора относится не сохраняет никаких государственных итераторы, поэтому мы можем использовать цикл без гражданства итератор не создавать пробки тратить дополнительную цену.
Каждая итерация функции итерации две переменные (государственные и управляющие переменные константы) значение в качестве параметра называется итератор без гражданства, используя только эти два значения, чтобы получить следующий элемент.
Типичным примером такого простого лица без итератора ipairs, он через каждый элемент массива.
В следующем примере мы используем простую функцию для достижения итератор, цифровой п квадрат:
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
В приведенном выше примере выход:
1 1 2 4 3 9
Итерационный состояния Обход включает в себя таблицу (во время цикла не изменяется состояние постоянной) и текущий индекс индекса (управляющие переменные), ipairs и преумножающийся функция очень проста, мы можем достичь в 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
Когда Lua называет ipairs (а), чтобы начать цикл, он приобрел три значения: итеративный функцию ИТЭР, постоянное состояние, управление переменной начальное значение 0, тогда Lua называет ITER (а, 0) возвращает значение 1, а [1] (если только не [1] = ноль); второй итерации вызывает ITER (а, 1) возвращает значение 2, а [2] rururu до первого элемента равна нулю.
Во многих случаях необходимость сохранения множества информации итератора состояния, а не просто указать постоянные контрольные и переменные, самый простой способ заключается в использовании замыкания, есть способ, чтобы инкапсулировать всю информацию о состоянии в таблицу, таблицу как итеративный статус констант, так как в этом случае вся информация может быть сохранена в таблице, поэтому итеративный функция, как правило, не требуется в качестве второго параметра.
В следующем примере мы создали наши собственные итераторы:
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
В приведенном выше примере выход:
Lua Tutorial
Приведенные выше примеры мы можем видеть, использование замыканий внутри функции elementIterator, рассчитанное для достижения установленного размера и выход каждого элемента.