Menu
Coddy logo textTech

table.unpack ve Varargs

Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası — ders 20 / 73.

Bazen bir array içinde değerleriniz bulunur ancak bunlara separate (ayrı) değerler olarak ihtiyacınız olur — diyelim ki her element öğesini kendi argument değeri olarak geçirmek için. İşte table.unpack budur: Bir array içindeki tüm elemanları yayılmış olarak return eder.

local scores: {number} = {85, 92, 78}
print(table.unpack(scores))     -- 85  92  78  (bir satır, üç değer)
print(math.max(table.unpack(scores))) -- 92 — her eleman bir argüman oldu

Bunun ayna görüntüsü varargs özelliğidir: ... aracılığıyla istenilen sayıda argument kabul eden bir function. Lua'da ... kullanımını görmüştünüz — Luau buna tip tanımlamanıza (type) izin verir, böylece gelen her values eşleşmelidir:

local function sum(...: number): number
    local total = 0
    for i = 1, select("#", ...) do
        total += select(i, ...)
    end
    return total
end

select("#", ...) kaç tane argument geldiğini return eder ve select(i, ...) ise i konumundan itibaren olan argument değerlerini return eder — bir ifade içinde tek bir değer olarak kullanıldığında, bu etkili bir şekilde "i-nci argument" demektir.

Bu iki özellik birbiriyle tam uyum sağlar: sum(table.unpack(scores)), array verisini doğrudan varargs fonksiyonunun içine aktarır — Luau'nun diğer dillerde göreceğiniz Spread çağrı desenine verdiği yanıttır. table.unpack, array verisini değiştirmeden okur.

challenge icon

Görev

Kolay

85, 92 ve 78 değerlerine sahip bir tipli dizi olan scores: {number} oluşturun.

  1. table.unpack kullanarak tüm skorları tek bir satırda yazdırın.
  2. math.max ve table.unpack kullanarak en yüksek skoru yazdırın.
  3. select("#", ...) ve select(i, ...) kullanarak tüm argümanlarını toplayan bir local function sum(...: number): number tanımlayın, ardından sum(table.unpack(scores)) değerini yazdırın.
  4. Aynı fonksiyonun düz argümanlarla da çalıştığını göstermek için sum(10, 20) yazdırın.

Kendin dene

-- Kodu buraya yaz
-- 1) scores'u tanımla: {number} = {85, 92, 78}
-- 2) print(table.unpack(scores)) ve açılmış scores'un math.max'ini
-- 3) select ile sum(...: number): number tanımla, sum(table.unpack(scores)) yazdır
-- 4) sum(10, 20) yazdır
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Luau'ya Giriş bölümündeki tüm dersler