이번 항목은 반복자에 대한 개념을 이해해야 지만 가능하다. C++ 에선 각 컨테이너에 대한 iterator 를 제공해 주고 있기 때문에, 그냥 사용만 하면 되지만, 루아에선 이런 iterator 가 없기 때문에 반복자를 직접 구현해야 한다.
루아에선 단 하나의 자료구조인 table만 제공해 주고, 유저가 직접 다른 자료구조를 구현해야 되기 때문에, 반복자를 확실히 짚고 넘어가야 할 것 같다.
우선 table을 훑으며, 다음 요소를 가리키게 할려면, 우선 반복자가 테이블의 어디에 위치해 있는가? 를 저장할 변수 1개와, 어떤 값인가? 를 저장할 변수 1개가 있어야 된다.
무론 변수가 있어야 한다는 것은 표현하기 위한 언어일 뿐, 논리적 변수(구조상 변수가 없어도 변수가 있는것 처럼 하게 하는 가상의 변수)여도 된다.
만약 아래와 같은 table 이 있다고 가정한다.
이때 각 요소를 리턴 하기 위해선 반복자가 table의 어디에 위치해 있는지 저장할 pos 와 해당 위치에 어떤 값인지 저장할 값이 있어야 한다.
이것을 루아로 표현 한다면
자 이렇게 구현 할 수 있을 것이다. 클로저가 C++ 의 함수 오브젝트와 비슷한 개념인것을 눈치 챈다면, 아주 쉽게 이해 될 수 있는 항목이니 반복자를 클로저로 구현하는 방법 쯤이야 식은 죽 먹기 일 것이다.
좀 더 깔끔하게 한다면, 라이브러리를 사용 하면 된다. 다음 코드를 보자.
이렇게 하면 되고 ipairs() 함수는 테이블에 대한 pos 와 값을 리턴해 주는 함수이며, 테이블의 끝에 왔을 때 nil 을 리턴 한다.
총평
일반 for 문은 다음 항목에 정리 되어 있으니, for 문에 in 이 무슨 의미인지는 나중에 알아 보도록 한다.
'책 정리 > Programming in Lua' 카테고리의 다른 글
루아(Lua) 8.2, C 패키지 ( C Packages ) (0) | 2008.12.23 |
---|---|
루아(lua), 8.1 컴파일, 실행 및 오류 검사(Compilation, Execution, and Errors) : 컴파일 (0) | 2008.12.21 |
루아(Lua) 7.5 : 일반 for 문 개념 잡기 ( 진짜 반복자 : True Iterators ) 편 (0) | 2008.12.21 |
루아(Lua) 7.4, 일반 for문 보충 개념 잡기 ( 복잡한 상태를 가진 반복자 함수 : Iterators with Complex State ) 편 (0) | 2008.12.21 |
루아(Lua), 일반 for문 보충 개념 잡기 ( 무상태 반복자 : Stateless Iterators ) 편 (0) | 2008.12.17 |
루아(Lua), 함수 양념 고급 활용 하기 ( 함수 꼬리 호출 : Proper Tail Calls ) 편 (0) | 2008.12.14 |
루아(Lua), 함수 양념 고급 활용 하기 ( 비전역 함수: Non-Global Functions ) 편 (0) | 2008.12.14 |
루아(Lua), 함수 양념 고급 활용 하기 ( 클로저 : Closures ) 편 (0) | 2008.12.14 |
루아(Lua), 함수 양념 고급 활용 하기 ( 함수 고급 활용 : More about Functions ) (0) | 2008.12.14 |
루아(Lua), 함수 개념 양념 뿌리기 ( 이름 있는 인수 편 : Named Arguments ) (0) | 2008.12.14 |
최근댓글