lua 스크립트 삽질

In: Programming

23 Nov 2009

루아 스크립트 삽질은 여전히 진행 중이다. 개인적으로 매일 할 일, 한 일 정도를 간단하게 기록하는데, 몇 주간 기록을 보면 평균적으로 주당 1번 정도 스크립트 삽질로 몇 시간을 날려 먹는 듯…

오늘의 삽질은 테이블에 대한 이터레이션 중의 하나인 ipairs다.

local t = {1, 2, 3, nil, 4, 5}

이런 식의 테이블이 있다고 가정하자. 이 테이블에 대해 ipairs를 쓰면 어떻게 될까?

for _, value in ipairs(t) do
  if value ~= nil then
    print(value)
  end
end

1
2
3

을 출력하고 끝이다.

value가 nil인 경우 ipairs와 같이 정수 인덱스 기반의 테이블 이터레이션은 바로 끝이 나버린다. 즉, 위의 코드에서 값이 nil인 경우를 고려하려면 ipairs가 아닌 pairs를 써야 한다.

원래의 코드는 충돌 처리 AABB의 정보를 테이블로 가지고 있는데, 이를 순회하는 코드가 있었다. 테이블을 2차원 격자 형태로 구성했고, 처리가 불필요한 경우(비어 있는)는 Null 타입 객체를 넣어서 처리했다. 문제는 Null 타입 객체의 프로퍼티 하나가 정말 nil이었다는 점이다. 초기화하는 코드의 변수 명에 오타가 있었다… ㅠ.ㅠ

아무리 코드를 봐도 알 수가 없고, 도대체 영역 검사가 왜 일부 영역만 되는지 알 수가 없었다. 관련 코드를 다시 싹~ 점검한 후에야 발견…

Comments are closed.

Categories