테이블을 사용한 숫자 Enum
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 52번째.
constant-table 패턴을 올바르게 구축해 봅시다. PascalCase로 테이블 이름을 선택하고, 각 members에 명시적인 number를 부여하면 그 이후부터는 코드에서 이름으로 의도를 전달할 수 있습니다:
local UserRole = {
Admin = 1,
Editor = 2,
Viewer = 3,
}TypeScript의 enum과 달리 아무것도 자동 번호 지정되지 않습니다 — 모든 값을 직접 선택합니다. 1부터 시작하는 것이 Lua의 관례에 잘 맞지만, 어떤 체계든 작동합니다 (200이나 404와 같은 HTTP 스타일 코드도 좋습니다).
members는 비교 시에 빛을 발합니다. role을 받는 function은 raw numbers 대신 named 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 패턴만으로는 허용되는 numbers를 제한하지 않습니다. 그 보장은 다음 레슨에서 배울 리터럴 유니온이 정확히 추가해 주는 부분입니다.
챌린지
쉬움세 개의 멤버를 가지는 UserRole이라는 이름의 constant table을 생성하세요:
Admin=1Editor=2Viewer=3
role: number를 인자로 받아 다음을 print하는 function checkPermissions를 생성하세요:
- role이
UserRole.Admin이면Full access granted - role이
UserRole.Editor이면Edit access granted - 그 외의 경우에는
View access only
그런 다음, 순서대로 진행하세요:
UserRole.AdminprintUserRole.EditorprintUserRole.ViewerprintcheckPermissions(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