Mảng tổng quát
Thuộc phần Giới thiệu về Luau trong hành trình Lua của Coddy. Bài học 64 trên 80.
Generics trở nên rất hữu ích khi bạn làm việc với bảng. Bạn đã viết mảng có kiểu dữ liệu như {number} hoặc {string}. Bên trong hàm generic, kiểu phần tử có thể đơn giản là T, còn {T} có nghĩa là “một mảng gồm bất cứ kiểu nào mà T hóa ra là”.
Đây là ví dụ kinh điển: lấy phần tử đầu tiên của bất kỳ mảng nào:
local function first<T>(items: {T}): T?
return items[1]
endTruyền một {string} vào, trình kiểm tra sẽ suy ra T = string, nên kết quả là một chuỗi. Truyền một {number} vào thì kết quả là một số. Một hàm thay thế cả loạt bản sao dành riêng cho từng kiểu.
Hãy chú ý kỹ đến kiểu trả về: đó là T?, không phải T. Mảng có thể rỗng, khi đó items[1] là nil: kiểu tùy chọn bạn đã gặp trước đó diễn đạt đúng điều này: “một T hoặc nil”. Trình kiểm tra sẽ nhắc người gọi xử lý trường hợp nil trước khi dùng kết quả. Đây chính là khả năng phát hiện bug mà bạn mong đợi ở một ngôn ngữ có kiểu dữ liệu.
Thử thách
DễLấy phần tử đầu tiên của một mảng bất kỳ.
- Viết
local function first<T>(items: {T}): T?để trả vềitems[1]. - Khai báo
local fruits: {string} = {"apple", "banana"}vàlocal empty: {number} = {}. - In ra
first(fruits), sau đófirst(empty).
Nhấn Chạy code: đầu ra hiển thị apple và nil.
Tự làm thử
-- 1) first<T>(items: {T}): T?
-- 2) fruits: {string} và một {number} rỗng
-- 3) in ra phần tử đầu tiên của mỗi tập hợp
Tất cả bài học trong Giới thiệu về Luau
1Bắt đầu với Luau
Luau là gì?Tại sao nên dùng Luau?Đoạn code Luau đầu tiênKiểm tra kiểu và chế độ lỗiÔn tập: Giới thiệu về Luau4Làm việc với hàm
Kiểu dữ liệu cho tham số và giá trị trả vềKiểu dữ liệu cho hàm ẩn danhHàm không trả về giá trịTham số tùy chọnGiá trị tham số mặc địnhGiá trị Boolean mặc địnhHàm có số lượng tham số thay đổiĐịnh nghĩa kiểu hàmÔn tập: hàm có kiểu dữ liệu2Kiểu dữ liệu cốt lõi
Số, chuỗi và BooleanKiểu 'any': lối thoátKiểu 'unknown'Kiểu Nil và kiểu tùy chọnSuy luận kiểu trong thực tếChú thích kiểu tường minhÔn tập: luyện tập với kiểu dữ liệu cốt lõi5Bí danh kiểu, kiểu hợp và kiểu giao
Bí danh kiểu cho kiểu nguyên thủyKiểu hợpLàm việc với kiểu hợpKiểu literalKiểu giaoKết hợp bí danh kiểuÔn tập: kết hợp kiểu nâng cao3Bảng có kiểu: mảng và Map
Mảng có kiểuThêm và đọc phần tửKiểu Map là gì?Khai báo và truy cập MapDuyệt bảngBảng có cấu trúc hỗn hợpĐọc lướiTạo lướitable.unpackÔn tập: mảng và Map6Định kiểu cấu trúc bảng
Chú thích cấu trúc trực tiếpBí danh kiểu cho cấu trúcThuộc tính tùy chọnCấu trúc và bảng không ràng buộcMở rộng cấu trúcThêm phương thức vào cấu trúcPhương thức self và dấu hai chấmÔn tập: định nghĩa cấu trúc bảng9Generics: cái nhìn đầu tiên
Vấn đề mà Generics giải quyếtHàm định danh tổng quátSử dụng hàm tổng quátMảng tổng quátBí danh kiểu tổng quátÔn tập: hàm tổng quátTự luyện tập: Trình biên dịch Luau online