인터섹션 타입
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 34번째.
유니온은 값이 한 타입 또는 다른 타입이라고 말합니다. 교차 타입은 반대 방향을 가리킵니다. 앰퍼샌드 &는 테이블 형태들을 결합하여 각 부분의 모든 필드를 가진 타입을 만듭니다:
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- Person은 두 필드를 모두 가져야 합니다
local user: Person = {
name = "Alice",
age = 25,
}age를 생략하면 검사기가 불평합니다. 교차는 "그리고"이지, 골라서 선택하는 것이 아닙니다. 이를 통해 작고 재사용 가능한 조각들로 큰 형태를 만들 수 있습니다. 서로 다른 관심사를 위한 집중된 타입을 정의한 다음, 필요할 때 함께 결합하세요:
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Luau에서 중요한 점이 하나 있습니다. 기본 타입이 아니라 테이블 형태(및 함수 타입)를 교차하세요. number & string과 같은 것은 동시에 두 타입일 수 있는 값이 없으므로 의미가 없습니다. "이 형태에 저 형태를 더하고 싶을 때" &가 바로 사용할 도구입니다.
물론 런타임에서 Person은 그저 일반적인 Lua 테이블일 뿐입니다. 교차는 검사기를 위해서만 존재합니다.
챌린지
쉬움두 개의 shape 별칭을 만드세요. name: string 필드를 가진 HasName과 age: number 필드를 가진 HasAge입니다.
HasName & HasAge 교집합으로 Person을 만드세요.
email: string 필드를 가진 HasEmail을 만들고, 세 가지 모두의 교집합인 HasName & HasAge & HasEmail으로 Employee를 만드세요.
다음을 선언하세요:
- 이름이
"Alice"이고 나이가25인user: Person - 이름이
"Bob"이고 나이가30이며 이메일이"bob@company.com"인worker: Employee
"Name: [name], Age: [age]"를 반환하는 displayPerson(person: Person): string과 "Name: [name], Age: [age], Email: [email]"을 반환하는 displayEmployee(employee: Employee): string을 만드세요.
displayPerson(user)와 displayEmployee(worker)를 별도의 줄에 출력하세요.
직접 해보기
-- 여기에 코드를 작성하세요
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- user와 worker를 선언하고, 두 개의 display 함수를 작성하세요,
-- displayPerson(user)와 displayEmployee(worker)를 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러