테이블을 사용한 숫자 Enum
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 52번째.
상수 테이블 패턴을 제대로 만들어 봅시다. PascalCase 테이블 이름을 정하고, 각 members에 명시적인 number를 지정하면 그때부터 코드는 이름으로 의미를 전달합니다:
local UserRole = {
Admin = 1,
Editor = 2,
Viewer = 3,
}TypeScript의 enum과 달리 자동으로 번호가 지정되지 않습니다. 모든 값을 직접 정합니다. 1부터 시작하는 것이 Lua의 관례에 잘 맞지만, 어떤 방식이든 사용할 수 있습니다(200 및 404와 같은 HTTP 스타일 코드도 괜찮습니다).
members는 비교에서 특히 유용합니다. role을 받는 function은 숫자를 그대로 사용하는 대신 이름이 지정된 constants를 기준으로 분기할 수 있습니다:
local function checkPermissions(role: number)
if role == UserRole.Admin then
print("Full access granted")
elseif role == UserRole.Editor then
print("Edit access granted")
else
print("View access only")
end
end매개변수의 타입이 number라는 점에 주목하세요. table 패턴만으로는 허용되는 숫자를 제한하지 않습니다. 이러한 보장이 바로 다음 레슨에서 literal unions가 추가하는 기능입니다.
챌린지
쉬움UserRole이라는 constant table을 three members로 create하세요:
Admin=1Editor=2Viewer=3
role: number를 인수로 받고 다음을 출력하는 function checkPermissions를 create하세요:
- role이
UserRole.Admin이면Full access granted - role이
UserRole.Editor이면Edit access granted - 그 외에는
View access only
그런 다음, 다음 순서대로 수행하세요:
UserRole.Admin을 printUserRole.Editor를 printUserRole.Viewer를 printcheckPermissions(UserRole.Admin)을 callcheckPermissions(UserRole.Editor)를 callcheckPermissions(UserRole.Viewer)를 call
직접 해보기
-- 여기에 코드를 작성하세요
-- 1) UserRole 상수 테이블 생성 (Admin=1, Editor=2, Viewer=3)
-- 2) if/elseif/else로 checkPermissions(role: number) 작성
-- 3) 세 멤버를 출력한 다음, 각각에 대해 함수 호출
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
7프로젝트: Typed Task Manager
프로젝트: 태스크 형태 정의하기태스크 추가 함수8Luau 방식의 Enum
Luau의 Enum 패턴테이블을 사용한 숫자 Enum유니온으로서의 문자열 Enum리터럴 유니온 Enum 사용하기상수 테이블 동결하기요약: Luau 방식의 Enum직접 연습해 보세요: 온라인 Lua 컴파일러