Hàm có số lượng tham số thay đổi
Thuộc phần Giới thiệu về Luau trong hành trình Lua của Coddy. Bài học 29 trên 80.
Bạn đã dùng ... (đối số biến thiên) của Lua để viết các hàm có thể nhận bất kỳ số lượng đối số nào. Luau cho phép bạn định kiểu các đối số biến thiên, nhờ đó mọi đối số truyền vào đều được kiểm tra:
function sum(...: number): number
local total = 0
for _, n in ipairs({...}) do
total = total + n
end
return total
end
print(sum(1, 2)) -- 3
print(sum(1, 2, 3, 4, 5)) -- 15...: number khai báo rằng mọi đối số bổ sung đều phải là số: sum(1, "two") sẽ gây ra lỗi kiểu dữ liệu. Các công cụ trong lúc chạy vẫn là những công cụ bạn đã biết:
{...}gom các đối số biến thiên vào một mảng (ở đây là{number})select("#", ...)đếm số đối số được truyền vào- Bạn có thể truyền thẳng
...cho một hàm khác, chẳng hạnmath.max(...)
Như trong Lua, ... phải là tham số cuối cùng: các tham số thông thường (có kiểu) đứng trước, còn phần đối số biến thiên nhận những đối số còn lại:
function joinWords(separator: string, ...: string): string
return table.concat({...}, separator)
end
print(joinWords("-", "a", "b", "c")) -- a-b-cThử thách
DễViết hai hàm nhận số lượng đối số bất kỳ.
- Viết
local function sumAll(...: number): numberđể cộng tất cả giá trị trong{...}bằngipairs. - Viết
local function joinWords(separator: string, ...: string): stringđể trả vềtable.concat({...}, separator). - In ra
sumAll(5, 10, 15)vàjoinWords("-", "apple", "banana", "cherry").
Nhấn Run Code: đầu ra hiển thị 30 và apple-banana-cherry.
Tự làm thử
-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) in ra hai kết quả
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à MapTự luyện tập: Trình biên dịch Luau online