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 olduBunun 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
endselect("#", ...) 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.
Görev
Kolay85, 92 ve 78 değerlerine sahip bir tipli dizi olan scores: {number} oluşturun.
table.unpackkullanarak tüm skorları tek bir satırda yazdırın.math.maxvetable.unpackkullanarak en yüksek skoru yazdırın.select("#", ...)veselect(i, ...)kullanarak tüm argümanlarını toplayan birlocal function sum(...: number): numbertanımlayın, ardındansum(table.unpack(scores))değerini yazdırın.- 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
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'ler