__tostring 메타메소드
Coddy Lua 여정의 로직 및 흐름 제어 (Logic & Flow) 섹션에 포함된 레슨. 54개 중 20번째.
Lua에서 테이블을 print하면 일반적으로 table: 0x5f8a20처럼 도움이 되지 않는 내용, 즉 메모리 주소만 표시됩니다. __tostring 메타메서드를 사용하면 테이블이 문자열로 변환될 때 정확히 무엇을 표시할지 정의하여 이 동작을 변경할 수 있습니다.
이 메타메서드는 디버깅과 더 깔끔한 출력을 만드는 데 특히 유용합니다. Lua가 테이블을 문자열로 변환해야 할 때(예를 들어 print()를 사용할 때), 테이블에 __tostring 필드가 있는 메타테이블이 있는지 확인합니다. 메타테이블이 있으면 Lua는 해당 함수를 호출하고 기본 표현 대신 그 반환 값을 사용합니다.
다음과 같이 구현할 수 있습니다:
local vector = {x = 3, y = 4}
local meta = {
__tostring = function(t)
return "Vector(" .. t.x .. ", " .. t.y .. ")"
end
}
setmetatable(vector, meta)
print(vector) -- 출력: Vector(3, 4)__tostring 함수는 테이블을 인수로 받아 문자열을 반환해야 합니다. 이 예제에서는 벡터의 x 및 y 값을 읽기 쉬운 형식으로 보여 주는 형식화된 문자열을 구성합니다.
이렇게 하면 코드를 훨씬 더 쉽게 다룰 수 있습니다. 디버깅 중에 암호 같은 메모리 주소를 보는 대신, 테이블에 무엇이 들어 있는지에 대한 의미 있는 정보를 얻을 수 있습니다.
챌린지
쉬움createPoint 함수를 작성하여 x와 y 좌표를 받고 사용자 지정 문자열 표현을 포함하는 포인트 테이블을 반환하세요.
x와 y 필드가 있는 테이블을 생성하고, __tostring 메타메서드가 있는 메타테이블을 연결한 다음, 테이블을 tostring()을 사용해 문자열로 변환한 결과를 반환하세요.
로직:
- 제공된 좌표를 값으로 갖는
x및y키가 있는 테이블을 생성합니다 "Point(x, y)"형식의 문자열을 반환하는__tostring이 있는 메타테이블을 생성합니다setmetatable()을 사용하여 메타테이블을 포인트 테이블에 연결합니다- 사용자 지정 문자열 표현을 얻기 위해
tostring(point)를 반환합니다
매개변수:
x(number): 포인트의 x 좌표y(number): 포인트의 y 좌표
반환값: "Point(x, y)" 형식의 포인트 사용자 지정 문자열 표현 (string)
직접 해보기
function createPoint(x, y)
-- 여기에 코드를 작성하세요
end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 및 흐름 제어 (Logic & Flow)의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러