Menu
CoddyTech

Hàm định danh 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 62 trên 80.

Đây là hàm identity đúng cách, dưới dạng một hàm tổng quát:

local function identity<T>(value: T): T
    return value
end

<T> sau tên hàm khai báo một tham số kiểu: một chỗ giữ chỗ đại diện cho “một kiểu nào đó, được xác định ở mỗi lần gọi”. Trong chữ ký hàm, bạn dùng T giống hệt như một kiểu thực: tham số có kiểu T, và hàm trả về kiểu T.

Dùng cùng một T cho đầu vào và đầu ra chính là mấu chốt. Nó liên kết chúng với nhau. Gọi identity("hello"), bộ kiểm tra xác định T = string cho lần gọi đó, nên kết quả có kiểu string. Gọi identity(42), T = number, nên kết quả có kiểu number. Một thân hàm, mọi kiểu, không mất gì cả.

T chỉ là một tên gọi theo quy ước, viết tắt của “Type”: <Item> hoặc <Value> cũng dùng được. Và như mọi khi trong Luau, dấu ngoặc nhọn chỉ dành cho bộ kiểm tra: khi chạy, đây là hàm Lua thông thường function identity(value) return value end.

challenge icon

Thử thách

Dễ

Viết một hàm trả về bất kỳ giá trị nào mà vẫn giữ nguyên kiểu dữ liệu của nó.

  1. Viết local function identity<T>(value: T): T để trả về value.
  2. Khai báo local luckyNumber: number = identity(7) và local greeting: string = identity("Hello, Luau!").
  3. In ra luckyNumber, sau đó in ra greeting.

Nhấn Run Code: đầu ra hiển thị 7 và Hello, Luau!.

Tự làm thử

-- 1) identity<T>(value: T): T
-- 2) luckyNumber và greeting từ các lần gọi identity
-- 3) in ra cả hai

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