Latest web development tutorials

루아 반복자

반복자 (반복자) 표준 템플릿 라이브러리 용기의 일부 또는 모든 요소를 ​​이송하는데 사용될 수있는 객체이다 각 반복자 객체의 주소가 결정되는 컨테이너를 나타낸다

루아 이터레이터 집합의 각 요소를 통과 할 수있는지지 구조체의 포인터 타입이다.


반복자에 대한 제네릭

반복 기능, 상태 상수, 제어 변수 : 자체 내부 반복 기능의 보존을위한 제네릭은, 사실,이 세 가지 값을 절약 할 수 있습니다.

반복 제네릭는 다음 구문은, 키 / 값 쌍의 세트를 제공한다 :

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

쌍 (t) 식의 목록; 위의 코드는, k는, 변수 목록을 v에.

다음 예를 참조하십시오 :

array = {"Lua", "Tutorial"}

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

출력은 상기 코드가 실행된다 :

1  Lua
2  Tutorial

위의 예는 우리는 루아가 기본적으로 제공 반복 기능 ipairs을 사용했다.

여기에서 우리는 팬의 실행을위한 프로세스를 보면 :

  • 먼저, 초기화 발현 후 값 산출 식 세 값의 요구 범위를 리턴한다 : 반복 함수 상태 상수, 제어 변수와, 다치 할당 결과의 수는 표현은 세 개 미만 반환되면 전무 포인트를 자동으로 만들 것으로, 추가 부분은 무시됩니다.
  • 둘째, 매개 변수로 상태 상수 및 제어 변수는 반복자 기능 (참고 : 초기화 및 반복 함수에 전달하면, 상태 상수 쓸모없는, 단지 그의 값을 얻는 구조)를 호출합니다.
  • 셋째, 함수는 변수리스트에 반복 값을 반환한다.
  • 넷째, 만약 루프의 제 1 단부에 닐의 반환 값 달리 루프 체.
  • 다섯째, 다시 두 번째 단계 반복 함수 호출을 다시

. 루아에서 우리는 종종 반복자 기능을 설명하는 데 사용,이 함수를 호출 할 때마다 컬렉션의 다음 요소를 반환합니다. 루아 반복자는 다음과 같은 두 가지 유형이 포함 :

  • 무 상태 반복자
  • 다중 상태 반복자

무 상태 반복자

무 상태 반복자는 어떤 상태 반복자를 유지하지 않는 의미, 그래서 우리는 루프 무 상태 반복자가 폐쇄 추가 가격을 보내고 만들지 않도록 사용할 수 있습니다.

각각의 반복, 반복 기능은 다음 요소를 얻기 위해 이들 두 값을 사용하여 매개 변수로 값 무 상태 반복자라고 두 변수 (상수 상태 및 제어 변수)입니다.

이러한 간단한 무 반복기의 전형적인 예는 그 어레이의 각 요소를 통해 ipairs이다.

다음의 예 우리는 반복자를 달성하기 위해 간단한 함수를 사용하여, 디지털, n은 제곱 :

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를 포함하고 반복적 인 기능은 우리가 루아에서 달성 할 수있는, 매우 간단합니다 :

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

루아는 ipairs (a)는주기를 시작하기 위해 호출 할 때, 그는 세 가지 값을 인수 : 반복 기능 ITER, 일정한 상태, 0의 제어 변수 초기 값 후 루아는 ITER를 (A, 0), 1을 반환 호출을 A [1] (않는 한 [1] = 닐) 번째 반복을 ITER (a는, 1), (2)를 돌려 호출 [2] ...... 제 닐 소자까지.


다중 상태 반복자

많은 경우에, 필요 간단히 제어 상수와 변수를 명시보다는 반복자 상태 정보를 복수 유지하는 가장 쉬운 방법은 반복적 같은 테이블로 모든 상태 정보 테이블을 캡슐화하는 방법이 있고, 마개를 사용하는 이 경우, 모든 정보가 테이블에 저장 될 수 있기 때문에, 정수의 상태가되므로 반복 기능은 일반적으로 두 번째 매개 변수를 필요로하지 않는다.

다음의 예는 우리는 우리 자신의 반복자를 생성 :

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 함수 내 클로저를 사용하는 것을 볼 수있다.