table.unpack dan Varargs
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 20 dari 73.
Terkadang kamu memiliki nilai dalam array, tetapi membutuhkannya sebagai nilai yang terpisah, misalnya untuk meneruskan setiap elemen sebagai argumen tersendiri. Itulah fungsi table.unpack: fungsi ini mengembalikan semua elemen array secara terpisah.
local scores: {number} = {85, 92, 78}
print(table.unpack(scores)) -- 85 92 78 (satu baris, tiga nilai)
print(math.max(table.unpack(scores))) -- 92, setiap elemen menjadi argumenKebalikannya adalah varargs: fungsi yang menerima sejumlah argumen berapa pun melalui .... Kamu sudah melihat ... di Lua. Luau memungkinkan kamu memberi tipe pada ... itu, sehingga setiap nilai yang masuk harus cocok:
local function sum(...: number): number
local total = 0
for i = 1, select("#", ...) do
total += select(i, ...)
end
return total
endselect("#", ...) mengembalikan jumlah argumen yang diterima, dan select(i, ...) mengembalikan argumen mulai dari posisi i: jika digunakan sebagai satu nilai dalam ekspresi, hasilnya pada dasarnya adalah "argumen ke-i".
Kedua fitur ini saling melengkapi: sum(table.unpack(scores)) menyebarkan array langsung ke fungsi vararg. Ini adalah jawaban Luau untuk pola pemanggilan dengan penyebaran yang bisa kamu temui di bahasa lain. table.unpack membaca array tanpa mengubahnya.
Tantangan
MudahBuat array bertipe scores: {number} dengan nilai 85, 92, dan 78.
- Cetak semua skor dalam satu baris menggunakan
table.unpack. - Cetak skor tertinggi menggunakan
math.maxdantable.unpack. - Definisikan
local function sum(...: number): numberyang menjumlahkan semua argumennya menggunakanselect("#", ...)danselect(i, ...), lalu cetaksum(table.unpack(scores)). - Cetak
sum(10, 20)untuk menunjukkan bahwa fungsi yang sama berfungsi dengan argumen biasa.
Coba sendiri
-- Tulis kodemu di sini
-- 1) deklarasikan scores: {number} = {85, 92, 78}
-- 2) tampilkan print(table.unpack(scores)) dan math.max dari nilai scores yang dibongkar
-- 3) definisikan sum(...: number): number dengan select, lalu tampilkan sum(table.unpack(scores))
-- 4) tampilkan sum(10, 20)
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