셰이프에 메서드 추가하기
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 80개 중 44번째.
Lua OOP 단원에서 테이블은 다른 값과 마찬가지로 함수도 담을 수 있다는 것을 배웠습니다. 셰이프는 이러한 함수 필드도 설명할 수 있습니다. 셰이프를 데이터 와 동작을 나타내는 작은 계약으로 만드는 것입니다.
메서드 필드에는 함수 단원에서 배운 함수 타입 구문을 사용합니다. 첫 번째 매개변수는 관례적으로 self라고 부르며, 메서드가 속한 테이블을 가리킵니다. 셰이프는 자기 자신을 참조할 수도 있습니다.
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}셰이프를 구현하려면 필드에 함수를 저장하고, 그 함수에 self 매개변수를 지정합니다.
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}이 함수를 호출하려면 테이블을 직접 self로 전달해야 합니다. greeter.greet(greeter)라고 쓰면 됩니다. 메서드는 self를 통해 자신이 호출된 테이블의 필드를 읽습니다.
테이블을 두 번 적는 것은 번거롭게 느껴집니다. 다행히 Lua에는 이미 해결책이 있습니다. 바로 콜론입니다. 다음 단원에서는 : 구문과 이러한 타입이 지정된 셰이프를 연결해 보겠습니다.
챌린지
쉬움직사각형 모양에 넓이를 계산하는 메서드를 만들어 보세요.
type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}를 작성하세요.- 너비가
4, 높이가6이고area = function(self: Rectangle): number가self.width * self.height를 반환하는local rect: Rectangle을 만드세요. rect.area(rect)를 출력한 다음rect.width를 출력하세요.
코드 실행을 누르세요. 출력은 24와 4입니다.
직접 해보기
-- 1) width, height 및 area 메서드를 가진 Rectangle 타입
-- 2) area가 구현된 로컬 rect: Rectangle (width 4, height 6)
-- 3) area를 출력한 다음 width를 출력
Luau 소개의 모든 레슨
4함수 다루기
매개변수와 반환값의 타입 지정익명 함수의 타입 지정아무것도 반환하지 않는 함수선택적 매개변수기본 매개변수 값불리언 기본값가변 인자 함수함수 타입 정의하기복습: 타입이 지정된 함수직접 연습해 보세요: 온라인 Luau 컴파일러