메타테이블을 이용하면 테이블에 테이블을 더하거나, 함수를 서로 비교하거나, 문자열을 호출할 수 있다. 또한 정의되지 않은 연산을 처리할 수 있다. 예를 들어 테이블 a와 테이블 b에 대해 a+b와 같은 표현식을 계산하는 방법을 정의할 수 있다.
루아의 모든 값은 연관된 메타테이블을 가질 수 있다. 모든 테이블과 유저데이터에는 각각 메타테이블이 따로 있다. 그리고 새로운 테이블을 생성하면 항상 메타테이블이 없이 생성된다. getmetatable 명령어로 메타테이블의 유무를 확인할 수 있다. 다음 코드를 보자. 새로 생성한 테이블에는 메타테이블 값이 nil이다.
t = {}
print(getmetatable(t)) --> nil
이제 메타테이블을 만들고 메타테이블을 설정해 보자. 모든 테이블을 setmetatable을 이용해서 메타테이블을 설정하거나 변경할 수 있다.
t1 = {} -- 임의의 메타테이블을 생성한다.
setmetatable(t, t1) -- 't1'을 't'의 메타테이블로 설정한다.
print(getmetatable(t) == t1) --> true
'루아(LUA)' 카테고리의 다른 글
중복된 테이블 문자열 이어붙이기 (0) | 2022.02.11 |
---|---|
시간 지연 함수 [루아] (0) | 2022.01.12 |
객체(테이블)에 함수를 저장하는 3가지 방법 (0) | 2022.01.08 |
메타테이블과 __index 메타메서드 (0) | 2022.01.08 |
이름 붙인 인자 넘기기 (0) | 2022.01.07 |