버그 해결을 위한 모든 질문을 던져
+1 vote
195 views

번역 관련 사이트에 질문하려다 아무래도 루아 쪽으로도 아시는 분이 잘 아실 거 같아 여기에 글을 올립니다.

Programming in Lua 원문을 보다 도저히 해석이 되지 않는 부분이 있습니다. 해당 부분은 Table-Access Metamethods 관련 부분으로, 전반적으로 metamethod에 대한 간략한 설명을 담고 있습니다. 원문은 아래와 같습니다:

The metamethods for arithmetic and relational operators all define behavior for otherwise erroneous situations. They do not change the normal behavior of the language. But Lua also offers a way to change the behavior of tables for two normal situations, the query and modification of absent fields in a table.

otherwise 부분부터 해석이 제대로 되지 않습니다. 최대한 해석을 해봐도 __index와 같은 메타메소드나 __add같은 메타메소드 전부 에러가 날 상황을 정의하는 것이 똑같은데, 어째서 이 둘을 구분해서 설명하는지 모르겠습니다. 애초에 제가 제대로된 해석을 했는지조차 모르겠습니다. 

루아 잘 아시고 영어 잘 하시는 분, 혹은 잘 모르셔도 해당 부분이 어떤 말인지 유추 가능하신 분들에 대한 도움이 절실합니다.

asked (7 point)
다시 보기 , 195 views

1 답변

+4 votes
우수 답변

위 내용에서 언급하는 otherwise erroneous situations는 에러상황에 대한 핸들링을 의미한다기 보다는 루아가 미리 정의하지 않은 예외상황을 의미한다고 보시는 게 맞는것 같습니다.

굳이 __add와 __le와 같은 연산자들과 __index를 구분짓고 있는 이유는 위에서 언급되는 것처럼 해당 메타 메소드가 앞의 둘과는 다르게 실제 루아의 기본 기능에 영향을 주기 때문입니다. (__add, __le는 애초에 없는 상황을 정의한 것이니까요)

__index, __newindex의 두 메타메소드는 실제 루아 테이블에 접근하고 할당하는 루아 테이블의 이미 정의된 기본 기능을 오버라이드하는 메타메소드이므로 이전의 메타메소드들과는 구분되는 것이라는 도입부 설명이라고 보시면 될 것 같습니다.

제가 굳이 번역해 보자면 이렇게 될 것 같네요.

산술 혹은 비교형 메타메소드들은 모두 예외적인 상황에 대한 행동들을 정의합니다. 이들은 언어의 기본 동작방식을 변경시키지 않습니다. 하지만 루아는 테이블에 관한 두 가지의 일반적인 행동인 비어있는 필드에 관한 접근과 수정에 대한 행동을 재정의 할 수 있는 방법을 제공합니다.

answered (169 point)
선택됨
훌륭한 답변에 업보트를 주지 않을 수가 없습니다. 정말 감사합니다!

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

110 질문
204 answers
219 댓글
230 users