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 geldiBunun 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
endselect("#", ...), 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.
Görev
Kolay85, 92 ve 78 içeren tür belirtilmiş bir dizi scores: {number} oluşturun.
table.unpackkullanarak tüm puanları tek satırda yazdırın.math.maxvetable.unpackkullanarak en yüksek puanı yazdırın.select("#", ...)veselect(i, ...)kullanarak tüm bağımsız değişkenlerini toplayanlocal function sum(...: number): numbertanımlayın, ardındansum(table.unpack(scores))ifadesini yazdırın.- 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)
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
1Luau ile Başlarken
Luau Nedir?Neden Luau Kullanılmalı?İlk Luau KodunuzTip Denetimi ve Hata ModlarıÖzet: Luau'ya Giriş4Fonksiyonlarla Çalışmak
Parametreleri ve Geri Dönüş Değerlerini TiplendirmeAnonim Fonksiyonları TiplendirmeHiçbir Şey Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriDeğişken Sayıda Parametre Alan Fonksiyonlar (Variadic)Fonksiyon Tiplerini TanımlamaÖzet: Tiplendirilmiş Fonksiyonlar2Temel Tipler
Temel Tipler: num, str, bool'any' Tipi: Kaçış Yolu'unknown' TipiNil ve İsteğe Bağlı (Optional) TiplerUygulamada Tip ÇıkarımıAçık Tip BelirteçleriÖzet: Temel Tipler Pratiği5Diğer Adlar (Aliases), Birleşimler, Kesişimler
İlkel Tipler için Tip Diğer Adları (Type Aliases)Birleşim Tipleri (Union Types)Birleşim Tipleri ile ÇalışmakLiteral (Sabit) TiplerKesişim Tipleri (Intersection Types)Tip Diğer Adlarını BirleştirmeÖzet: Gelişmiş Tip Kombinasyonları3Tipli Tablolar: Diziler ve Map'ler
Tipli DizilerEleman Ekleme ve OkumaMap Tipi Nedir?Map Bildirimi ve Map'lere ErişimTablolar Üzerinde YinelemeKarma Biçimli TablolarÇok Boyutlu Tipli Dizilertable.unpack ve VarargsÖzet: Diziler ve Map'lerKendi başına pratik yap: Online Lua derleyicisi