Menu
CoddyTech

Fungsi Variadik

Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 29 dari 80.

Kamu sudah menggunakan ... (varargs) di Lua untuk menulis fungsi yang menerima argumen dalam jumlah berapa pun. Luau memungkinkanmu memberi tipe pada varargs, sehingga setiap argumen yang masuk diperiksa:

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 menyatakan bahwa setiap argumen tambahan harus berupa angka: sum(1, "two") akan menyebabkan error tipe. Alat saat runtime yang digunakan tetap sama:

  • {...} mengumpulkan varargs ke dalam array (di sini berupa {number})
  • select("#", ...) menghitung jumlah argumen yang diterima
  • ... dapat langsung diteruskan ke fungsi lain, misalnya math.max(...)

Seperti di Lua, ... harus menjadi parameter terakhir: parameter biasa yang bertipe ditulis terlebih dahulu, lalu bagian variadik mengumpulkan sisanya:

function joinWords(separator: string, ...: string): string
    return table.concat({...}, separator)
end

print(joinWords("-", "a", "b", "c"))  -- a-b-c
challenge icon

Tantangan

Mudah

Tulis dua fungsi yang menerima berapa pun jumlah argumen.

  1. Tulis local function sumAll(...: number): number yang menjumlahkan {...} dengan ipairs.
  2. Tulis local function joinWords(separator: string, ...: string): string yang mengembalikan table.concat({...}, separator).
  3. Cetak sumAll(5, 10, 15) dan joinWords("-", "apple", "banana", "cherry").

Tekan Jalankan: output menampilkan 30 dan apple-banana-cherry.

Coba sendiri

-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) cetak kedua hasilnya

Semua pelajaran di Pengantar Luau

Latihan sendiri: Compiler Luau online