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 dizide değerleriniz olur, ancak bunlara ayrı değerler olarak ihtiyaç duyarsınız: örneğin, her öğeyi kendi argümanı olarak geçirmek için. İşte table.unpack bunun içindir: bir dizinin tüm öğelerini açarak döndürür.

local scores: {number} = {85, 92, 78}
print(table.unpack(scores))     -- 85  92  78  (one line, three values)
print(math.max(table.unpack(scores))) -- 92 — her eleman bir argüman haline geldi

Bunun karşılığı varargs özelliğidir: ... aracılığıyla herhangi sayıda argüman kabul eden bir fonksiyon. Lua'da ... kullanımını gördünüz: Luau, buna tür vermenize izin verir; böylece gelen her değer eşleşmek zorundadır:

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

select("#", ...), kaç tane argümanın geldiğini döndürür ve select(i, ...), argümanları i konumundan itibaren döndürür: bir ifadede tek bir değer olarak kullanıldığında bu, fiilen "i'inci argüman" demektir.

Bu iki özellik birlikte işe yarar: sum(table.unpack(scores)), diziyi doğrudan vararg fonksiyonuna açar; bu, Luau'nun diğer dillerde görebileceğiniz spread-call kalıbına verdiği yanıttır. table.unpack, diziyi değiştirmeden okur.

challenge icon

Görev

Kolay

85, 92 ve 78 içeren tür belirtilmiş bir dizi scores: {number} oluşturun.

  1. table.unpack kullanarak tüm puanları tek satırda yazdırın.
  2. math.max ve table.unpack kullanarak en yüksek puanı yazdırın.
  3. select("#", ...) ve select(i, ...) kullanarak tüm bağımsız değişkenlerini toplayan local function sum(...: number): number tanımlayın, ardından sum(table.unpack(scores)) ifadesini yazdırın.
  4. Aynı işlevin normal bağımsız değişkenlerle de çalıştığını göstermek için sum(10, 20) ifadesini yazdırın.

Kendin dene

-- Kodu buraya yaz
-- 1) scores: {number} = {85, 92, 78} tanımla
-- 2) print(table.unpack(scores)) ve açılmış scores'un math.max değerini yazdır
-- 3) select ile sum(...: number): number tanımla, sum(table.unpack(scores)) yazdır
-- 4) print sum(10, 20)
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

Kendi başına pratik yap: Online Lua derleyicisi