Menu
CoddyTech

Enum số bằng bảng

Thuộc phần Giới thiệu về Luau trong hành trình Lua của Coddy. Bài học 56 trên 80.

Đây là mẫu bảng hằng số đầy đủ. Chọn tên bảng theo PascalCase, gán một số cụ thể cho mỗi thành viên, rồi từ đó code sẽ dùng tên:

local UserRole = {
    Admin = 1,
    Editor = 2,
    Viewer = 3,
}

Khác với enum của TypeScript, các số không tự động tăng. Bạn tự chọn từng giá trị. Bắt đầu từ 1 rất hợp với quy ước của Lua, nhưng cách nào cũng được, chẳng hạn các mã kiểu HTTP như 200 và 404.

Các thành viên rất hữu ích khi so sánh. Một hàm nhận vai trò có thể rẽ nhánh dựa trên các hằng số có tên thay vì các số rời rạc:

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

Lưu ý tham số có kiểu number: chỉ dùng mẫu bảng thì chưa thể giới hạn những số nào được phép. Bài học tiếp theo sẽ giới thiệu kiểu hợp literal để tạo ra chính xác sự đảm bảo đó.

challenge icon

Thử thách

Dễ

Đặt tên cho ba mức độ khó bằng một bảng hằng số.

  1. Tạo local Level = {Easy = 1, Normal = 2, Hard = 3}.
  2. Viết local function describeLevel(level: number): string để trả về "Relaxed" cho Level.Easy, "Standard" cho Level.Normal, và "Brutal" trong trường hợp còn lại.
  3. In ra Level.Hard, sau đó là describeLevel(Level.Normal).

Nhấn Chạy code: đầu ra hiển thị 3 và Standard.

Tự làm thử

-- 1) bảng hằng số (constant) Level (Easy = 1, Normal = 2, Hard = 3)
-- 2) hàm (function) describeLevel(level: number): string dùng if/elseif/else
-- 3) in ra Level.Hard, rồi gọi describeLevel(Level.Normal)

Tất cả bài học trong Giới thiệu về Luau

Tự luyện tập: Trình biên dịch Luau online