이번 항목은 반복자에 대한 개념을 이해해야 지만 가능하다. C++ 에선 각 컨테이너에 대한 iterator 를 제공해 주고 있기 때문에, 그냥 사용만 하면 되지만, 루아에선 이런 iterator 가 없기 때문에 반복자를 직접 구현해야 한다.

루아에선 단 하나의 자료구조인 table만 제공해 주고, 유저가 직접 다른 자료구조를 구현해야 되기 때문에, 반복자를 확실히 짚고 넘어가야 할 것 같다.

우선 table을 훑으며, 다음 요소를 가리키게 할려면, 우선 반복자가 테이블의 어디에 위치해 있는가? 를 저장할 변수 1개와, 어떤 값인가? 를 저장할 변수 1개가 있어야 된다.

무론 변수가 있어야 한다는 것은 표현하기 위한 언어일 뿐, 논리적 변수(구조상 변수가 없어도 변수가 있는것 처럼 하게 하는 가상의 변수)여도 된다.


만약 아래와 같은 table 이 있다고 가정한다.

이때 각 요소를 리턴 하기 위해선 반복자가 table의 어디에 위치해 있는지 저장할 pos 와 해당 위치에 어떤 값인지 저장할 값이 있어야 한다.

이것을 루아로 표현 한다면

자 이렇게 구현 할 수 있을 것이다. 클로저가 C++ 의 함수 오브젝트와 비슷한 개념인것을 눈치 챈다면, 아주 쉽게 이해 될 수 있는 항목이니 반복자를 클로저로 구현하는 방법 쯤이야 식은 죽 먹기 일 것이다.

좀 더 깔끔하게 한다면, 라이브러리를 사용 하면 된다. 다음 코드를 보자.

이렇게 하면 되고 ipairs() 함수는 테이블에 대한 pos 와 값을 리턴해 주는 함수이며, 테이블의 끝에 왔을 때 nil 을 리턴 한다.


총평

일반 for 문은 다음 항목에 정리 되어 있으니, for 문에 in 이 무슨 의미인지는 나중에 알아 보도록 한다.


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기