Menu
CoddyTech

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 argumen

Kebalikannya 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
end

select("#", ...) 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.

challenge icon

Tantangan

Mudah

Buat array bertipe scores: {number} dengan nilai 85, 92, dan 78.

  1. Cetak semua skor dalam satu baris menggunakan table.unpack.
  2. Cetak skor tertinggi menggunakan math.max dan table.unpack.
  3. Definisikan local function sum(...: number): number yang menjumlahkan semua argumennya menggunakan select("#", ...) dan select(i, ...), lalu cetak sum(table.unpack(scores)).
  4. 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)
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pengantar Luau

Latihan sendiri: Compiler Luau online