Menu
CoddyTech

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]
end

Truyề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.

challenge icon

Thử thách

Dễ

Lấy phần tử đầu tiên của một mảng bất kỳ.

  1. Viết local function first<T>(items: {T}): T? để trả về items[1].
  2. Khai báo local fruits: {string} = {"apple", "banana"} và local empty: {number} = {}.
  3. 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

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