Fungsi Variadik
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 27 dari 73.
Kamu telah menggunakan ... (varargs) Lua untuk menulis fungsi yang menerima argumen sebanyak apa pun. Luau memungkinkan kamu memberi tipe pada varargs, sehingga setiap argumen yang masuk akan 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 runtime yang digunakan adalah yang sudah kamu kenal:
{...}mengumpulkan varargs ke dalam array (di sini, sebuah{number})select("#", ...)menghitung jumlah argumen yang diterima...dapat langsung diteruskan ke fungsi lain, misalnyamath.max(...)
Seperti di Lua, ... harus menjadi parameter terakhir: parameter biasa (yang bertipe) diletakkan lebih dahulu, lalu bagian variadik mengumpulkan sisanya:
function joinWords(separator: string, ...: string): string
return table.concat({...}, separator)
end
print(joinWords("-", "a", "b", "c")) -- a-b-cTantangan
MudahBuat fungsi bernama sumAll yang menerima sejumlah argumen number (...: number) dan mengembalikan jumlahnya sebagai number.
Buat fungsi bernama countValues yang menerima sejumlah argumen string dan mengembalikan berapa banyak argumen yang diberikan, sebagai number: gunakan select("#", ...).
Buat fungsi bernama joinWords yang menerima separator: string wajib diikuti sejumlah argumen string, lalu mengembalikan semua argumen yang digabungkan dengan pemisah tersebut (gunakan table.concat pada {...}): tipe pengembaliannya string.
Panggil dan cetak setiap pemanggilan pada barisnya sendiri:
sumAll(5, 10, 15)sumAll(1, 2, 3, 4, 5)countValues("a", "b", "c", "d")joinWords("-", "apple", "banana", "cherry")joinWords(" | ", "red", "green", "blue")
Coba sendiri
-- Tulis kodemu di sini
-- sumAll(...: number): number -- lakukan perulangan pada {...}
-- countValues(...: string): number -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- lalu cetak kelima hasilnya
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengantar Luau
1Memulai dengan Luau
Apa Itu Luau?Mengapa Menggunakan Luau?Kode Luau PertamamuPemeriksaan Tipe dan Mode ErrorRangkuman: Pengenalan Luau4Bekerja dengan Fungsi
Menentukan Tipe Parameter dan Nilai KembalianMenentukan Tipe Fungsi AnonimFungsi yang Tidak Mengembalikan NilaiParameter OpsionalNilai Default ParameterFungsi VariadikMendefinisikan Tipe FungsiRangkuman: Fungsi Bertipe2Tipe Inti
Tipe Dasar: num, str, boolTipe 'any': Jalan Keluar DaruratTipe 'unknown'Nil & Tipe OpsionalInferensi Tipe dalam PraktikAnotasi Tipe EksplisitUlasan: Latihan Tipe Inti5Alias, Union, dan Intersection
Alias Tipe untuk Tipe PrimitifTipe UnionMenggunakan Tipe UnionTipe LiteralTipe IntersectionMenggabungkan Alias TipeRekap: Kombinasi Tipe Lanjutan3Tabel Bertipe: array dan Map
array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMelakukan Iterasi pada TabelTabel dengan Bentuk Campuranarray Bertipe Multidimensitable.unpack dan VarargsRingkasan: array dan MapLatihan sendiri: Compiler Luau online