Variadic Fonksiyonlar (...)
Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 11 / 54.
Bazen herhangi sayıda bağımsız değişkenle çalışabilen bir işleve ihtiyaç duyarsın. Her durum için ayrı işlevler yazmadan iki, üç ya da on sayının toplamını hesaplamak isteyebilirsin. Lua bunun için özel bir söz dizimi sunar: üç nokta ...
Bir fonksiyonun parametre listesine ... yerleştirdiğinde, bu fonksiyon herhangi sayıda argüman kabul eden değişken sayıda parametreli bir fonksiyon hâline gelir:
function sum(...)
-- Fonksiyon gövdesi
endFonksiyonun içinde, bu argümanlara ... kullanarak yeniden erişebilirsin. Onlarla daha kolay çalışmak için süslü parantezleri kullanarak bir tabloya koyabilirsin:
function sum(...)
local args = {...}
local total = 0
for i = 1, #args do
total = total + args[i]
end
return total
end
print(sum(5, 10, 15)) -- Çıktı: 30
print(sum(1, 2, 3, 4, 5)) -- Çıktı: 15{...} ifadesi, işleve geçirilen tüm argümanları içeren liste tarzı bir tablo oluşturur. Ardından uzunluk işleci # veya ipairs() kullanarak bu tabloda diğer tablolarda olduğu gibi yineleme yapabilirsiniz.
Bu, hiçbir bağımsız değişken nil olmadığı sürece çalışır. Bir nil, tabloda bir boşluk bırakır ve boşluklar içeren bir tabloda # güvenilir değildir. select("#", ...), nil olanlar da dahil olmak üzere bağımsız değişkenlerin sayısını her zaman döndürür:
function countArgs(...)
return select("#", ...)
end
print(countArgs(10, 20, 30)) -- Çıktı: 3
print(countArgs(10, nil, 30, nil)) -- Çıktı: 4Görev
KolayHerhangi sayıda sayısal bağımsız değişken kabul eden ve bunların ortalamasını döndüren bir calculateAverage işlevi yaz.
Esnek sayıda bağımsız değişken kabul etmek için ... değişken sayıda bağımsız değişken söz dizimini kullan, bunları bir tabloya koy, toplamlarını hesapla ve sayıya böl.
Not: Başlangıç kodu ("Don't touch this code" olarak işaretlenmiştir) girdiden sayıları okur, her birini metinden sayıya tonumber() kullanarak dönüştürür ve numbers adlı bir tabloda saklar. Sonunda, tablonun değerlerini ayrı bağımsız değişkenler olarak yayan unpack(numbers) kullanarak işlevini çağırır; böylece işlevin bunları ... olarak alır. Bu kodu değiştirmen veya ayrıntılı olarak anlaman gerekmez; yalnızca calculateAverage yazmaya odaklan.
Mantık:
- Tüm bağımsız değişkenleri
{...}kullanarak bir tabloya koy - Tüm sayıların toplamını hesaplamak için tabloda yineleme yap
- Ortalamayı bulmak için toplamı bağımsız değişken sayısına böl
- Ortalamayı sayı olarak döndür
Parametreler:
...(sayılar): Değişken sayıda sayısal bağımsız değişken
Döndürür: Sağlanan tüm sayıların ortalaması (sayı)
Kendin dene
-- Bu koda dokunmayın --
local numbers = {}
while true do
local input = io.read()
if input == nil or input == "" then
break
end
local num = tonumber(input)
if num then
table.insert(numbers, num)
end
end
-------------------------
function calculateAverage(...)
-- Kodu buraya yazın
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Düzey Tablo Yineleme
pairs() ile Yinelemeipairs() ile Yinelemepairs() vs. ipairs()Özet - Karakter Sayfası2Daha Fazla Tablo Kütüphanesi Fonksiyonu
table.concat()Tablo Oluşturma ve unpack()table.sort()Fonksiyonlar ile Özel SıralamaÖzet - Yüksek Skor Tablosu3İleri Düzey Fonksiyon Kavramları
Birden Fazla Değer DöndürmeVariadic Fonksiyonlar (...)Birinci Sınıf Değer Olarak FonksiyonlarAnonim FonksiyonlarClosure Nedir?Özet - Basit Event HandlerKendi başına pratik yap: Online Lua derleyicisi