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. Belki her durum için ayrı işlevler yazmadan iki, üç veya on sayının toplamını hesaplamak istersin. Lua bunun için özel bir söz dizimi sağlar: üç nokta ...
Bir fonksiyonun parametre listesine ... yerleştirdiğinizde, herhangi bir sayıda bağımsız değişken kabul eden değişken sayılı bir fonksiyon hâline gelir:
function sum(...)
-- Fonksiyon gövdesi
endFonksiyonun içinde, bu argümanlara yine ... kullanarak erişebilirsiniz. Onlarla daha kolay çalışmak için, süslü parantezleri kullanarak onları bir tabloya yerleştirebilirsiniz:
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 aktarılan tüm bağımsız değişkenleri içeren liste tarzı bir tablo oluşturur. Ardından uzunluk işlecini # veya ipairs() kullanarak bu tabloda, diğer tüm tablolarda olduğu gibi yineleme yapabilirsiniz.
Gö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ın.
Esnek sayıda bağımsız değişken kabul etmek, bunları bir tabloda toplamak, toplamlarını hesaplamak ve bağımsız değişken sayısına bölmek için değişken bağımsız değişken söz dizimini ... kullanın.
Not: Başlangıç kodu ("Bu koda dokunma" olarak işaretlenmiştir) girdiden sayıları okur, her birini tonumber() kullanarak metinden sayıya dönüştürür ve bunları numbers adlı bir tabloda saklar. Sonunda, unpack(numbers) kullanarak işlevinizi çağırır; bu, tablonun değerlerini ayrı bağımsız değişkenler olarak açar, böylece işleviniz bunları ... olarak alır. Bu kodu ayrıntılı olarak değiştirmeniz veya anlamanız gerekmez; yalnızca calculateAverage işlevini yazmaya odaklanın.
Mantık:
- Tüm bağımsız değişkenleri
{...}kullanarak bir tabloda toplayın - Tüm sayıların toplamını hesaplamak için tabloda yineleme yapın
- Ortalama değeri elde etmek için toplamı bağımsız değişken sayısına bölün
- Ortalamayı sayı olarak döndürün
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(...)
-- Buraya kod yazın
end
local average = calculateAverage(unpack(numbers))
print("Average: " .. average)
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