셰이프에 메서드 추가하기
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 42번째.
Lua OOP 장에서 테이블이 다른 값과 마찬가지로 function을 담을 수 있다는 것을 배웠습니다. 셰이프는 이러한 function 필드도 설명할 수 있습니다. 셰이프를 데이터 및 동작에 대한 작은 계약으로 만드는 것입니다.
메서드 필드는 functions 장에서 배운 function-type 구문을 사용합니다. 첫 번째 매개변수는 관례적으로 self라고 이름을 지정하며, 이는 메서드가 속한 테이블입니다. 또한 셰이프는 자기 자신을 참조할 수도 있습니다.
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}셰이프를 구현하려면 필드에 function을 저장하고 해당 self 매개변수를 지정합니다.
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}이를 호출한다는 것은 테이블을 self로 직접 전달하는 것을 의미합니다: greeter.greet(greeter). self를 통해 메서드는 호출된 테이블의 필드를 읽습니다.
테이블을 두 번 작성하는 것은 번거롭게 느껴집니다. 이미 Lua의 해결책인 콜론을 알고 있습니다. 다음 레슨에서는 : 구문을 이러한 타입이 지정된 셰이프와 연결합니다.
챌린지
쉬움Rectangle이라는 타입 별칭을 다음과 같이 생성하세요:
width타입은numberheight타입은numberarea:(self: Rectangle) -> number를 반환하는 method이며,width * height를 반환합니다.perimeter:(self: Rectangle) -> number를 반환하는 method이며,2 * (width + height)를 반환합니다.
width가 4이고 height가 6이며, 두 method가 모두 구현된 Rectangle 타입의 변수 rect를 생성하세요(self 매개변수를 기억하세요).
다음을 각각 한 줄에 하나씩 출력하세요(dot 구문으로 method를 호출하고 rect를 self로 전달하세요):
- 직사각형의 area
- 직사각형의 perimeter
- 직사각형의 width
직접 해보기
-- 여기에 코드를 작성하세요
-- 1) 두 개의 number 필드와 두 개의 메서드를 가진 타입 Rectangle을 정의하세요
-- 2) 두 메서드를 모두 구현하는 rect(width 4, height 6)를 생성하세요
-- 3) area, perimeter 및 width를 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러