루아의 블록 주석에 대한 사소한 오해

Twitter icon류광, 2007-04-28 20:04
루아의 블록 주석을 --]]로 닫는 것은 필수가 아니라 관례입니다.

LUA 강좌 - C,C++ 을 아는사람을 위한. 루아의 시작..에서 되엔자앙(hdd340)님은 --[[ ... --]]보다는 --[[ ... ]]-- 가 더 그럴싸 했을 거라고 하셨는데요. 약간의 오해가 있습니다. 블록 주석을 여는 기호열이 --[[인 것은 맞습니다만 닫는 기호열은 그냥 ]]입니다.

블록 주석을 닫을 때 ]] 앞에 --를 붙이는 것은 블록 주석을 좀 더 편하게 활성화, 비활성화하기 위한 관례일 뿐입니다. 예를 들어, 다음처럼 디버깅 등의 목적으로 임시로 일부 코드를 블록으로 감쌌다고 합시다.

--[[ 블록 주석의 시작
  call_some_fishy_func() -- (1) 실행되지 않음
--]]

나중에 (1)을 다시 활성화시킨다고 하면, --[[ 와 --]]를 삭제할 필요 없이 --[에 -하나만 추가하면 됩니다.

---[[ 이제는 그냥 한 줄의 주석
  call_some_fishy_func() -- (1) 실행됨
--]] 역시 그냥 한 줄의 주석

----[는 블록 주석의 시작이 아니라 한 줄 주석의 시작을 뜻하는 --에 -[라는 주석 내용이 붙은 형태이므로 (1)의 코드는 더 이상 주석의 일부가 아닙니다. 다시 블록 주석으로 바꾸려면 ---[를 --[로 바꾸기만 하면 되고요.

추가로, --[[ ... ]]-- 도 가능합니다.

--[[ 블록 주석의 시작
  call_some_fishy_func()
]]-- (2)

(2)는 블록 주석을 닫은 다음에 한줄 주석을 시작한 것이니까요... 단, 이런 형태에서 --[[를 ---[로 바꾸면 (2)는 ]]라는 코드에 한 줄 주석이 붙은 형태가 되어서 구문 오류가 됩니다. (]]는 유효한 루아 문장이 아니므로).

기본적으로 --[[ ... ]]는 줄바꿈이나 기타 특수 문자가 포함된 문자열 리터럴을 " ... " 대신 [[ ... ]]로 감싸서 표기하는 것과 같은 메커니즘입니다. 5.1에서 [==[... ]==](... ]==) 형태의 구문도 지원하게 되었는데 블록 주석 역시 같은 형태의 구문을 지원하게 되었다는 점을 봐도 내부적으로 같은 해석 루틴을 사용할 가능성이 아주 큽니다. 물론 결정적인 증거는 루아 구현 코드를 보면 나오겠지만요...

되엔자앙 님은 제가 번역한 루아를 이용한 민첩하고 효과적인 게임 개발를 참고하셨다고 하는데 해당 부분에 블록 주석을 반드시 --]]로 닫아야 한다는 말은 없지만, 예제에 왜 --]]를 썼는지에 대해서는 설명이 없어서 생긴 오해인 것 같습니다. 이런 류의 오해는 조만간 Programming in Lua 2nd ed.의 번역서가 나오면 상당히 해소가 될 것입니다. 두 책의 관계는 제 번역서의 부록 A 루아 보충 앞 부분에 밝혀두었습니다...

태그: 프로그래밍 Lua

comments powered by Disqus

예전 댓글(읽기 전용)