Menu
CoddyTech

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ạn math.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-c
challenge icon

Thử thách

Dễ

Viết hai hàm nhận số lượng đối số bất kỳ.

  1. Viết local function sumAll(...: number): number để cộng tất cả giá trị trong {...} bằng ipairs.
  2. Viết local function joinWords(separator: string, ...: string): string để trả về table.concat({...}, separator).
  3. 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

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