Menu
CoddyTech

Enum chuỗi dưới dạng hợp

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

Các con số khiến nhật ký khó hiểu: thấy 2 thì bạn biết rất ít, thấy "down" thì bạn biết mọi thứ. Để tạo enum dễ đọc, Luau có công cụ là kiểu hợp các giá trị chuỗi cố định (literal union types): một kiểu có các thành viên là những chuỗi chính xác:

type Direction = "up" | "down" | "left" | "right"

local facing: Direction = "up"    -- ✓
local typo: Direction = "upp"     -- ✗ lỗi kiểu dữ liệu khi chỉnh sửa

Biến được chú thích bằng Direction có thể chứa bốn chuỗi đó và không gì khác. Viết sai một chuỗi, trình kiểm tra sẽ phát hiện ngay lập tức: bug không bao giờ đến được với người chơi.

Khi chạy, các giá trị này là chuỗi thông thường. In chúng ra, nối chúng hoặc so sánh chúng bằng ==. Mọi điều bạn biết về chuỗi đều áp dụng được:

print(facing)            -- lên
print(`facing {facing}`) -- hướng lên

Hãy so sánh hai mẫu bạn vừa học: bảng hằng số tạo ra một giá trị khi chạy (UserRole) chứa các thành viên, còn kiểu hợp các giá trị chuỗi cố định hoàn toàn không tạo ra giá trị nào. Không có bảng Direction, chỉ có một quy tắc mà trình kiểm tra áp dụng để xác định chuỗi nào phù hợp. Những giá trị giàu tính mô tả, tự ghi chú mà không tốn chi phí khi chạy khiến kiểu hợp các giá trị chuỗi cố định trở thành phong cách enum được ưu tiên trong code Luau.

challenge icon

Thử thách

Dễ

Lưu trữ một hướng chỉ có thể là một trong bốn tên.

  1. Viết type Direction = "up" | "down" | "left" | "right".
  2. Khai báo local facing: Direction = "left".
  3. In ra facing, sau đó `The player moves {facing}`.

Nhấn Run Code: đầu ra hiển thị left và The player moves left.

Tự làm thử

-- 1) Định nghĩa kiểu Direction là hợp của bốn chuỗi (string)
-- 2) local facing: Direction = "left"
-- 3) In ra facing, rồi đến câu văn

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