Menu
Coddy logo textTech

Funkcje wariadyczne (...)

Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 11 z 54.

Czasami potrzebujesz funkcji, która może działać z dowolną liczbą argumentów. Może chcesz obliczyć sumę dwóch liczb, trzech lub dziesięciu, bez pisania osobnych funkcji dla każdego przypadku. Lua udostępnia specjalną składnię: trzy kropki ...

Gdy umieścisz ... na liście parametrów funkcji, staje się ona funkcją wariadyczną, która przyjmuje dowolną liczbę argumentów:

function sum(...)
    -- Ciało funkcji
end

Wewnątrz funkcji możesz uzyskać dostęp do tych argumentów, ponownie używając .... Aby łatwiej z nimi pracować, możesz umieścić je w tablicy, używając nawiasów klamrowych:

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))  -- Wynik: 30
print(sum(1, 2, 3, 4, 5))  -- Wynik: 15

Wyrażenie {...} tworzy tabelę w formie listy zawierającą wszystkie argumenty przekazane do funkcji. Następnie możesz iterować po tej tabeli tak jak po każdej innej, używając operatora długości # lub ipairs().

challenge icon

Wyzwanie

Łatwy

Napisz funkcję calculateAverage, która przyjmuje dowolną liczbę argumentów numerycznych i zwraca ich średnią.

Użyj składni wariadycznej ..., aby przyjąć zmienną liczbę argumentów, spakować je do tablicy, obliczyć ich sumę i podzielić ją przez ich liczbę.

Uwaga: Kod początkowy (oznaczony tekstem "Don't touch this code") odczytuje liczby z wejścia, konwertuje każdą z tekstu na liczbę za pomocą tonumber() i zapisuje je w tablicy o nazwie numbers. Na końcu wywołuje Twoją funkcję za pomocą unpack(numbers), co przekazuje wartości z tablicy jako osobne argumenty, więc Twoja funkcja otrzymuje je jako .... Nie musisz modyfikować tego kodu ani szczegółowo go rozumieć; skup się tylko na napisaniu funkcji calculateAverage.

Logika:

  • Spakuj wszystkie argumenty do tablicy za pomocą {...}
  • Przejdź przez tablicę, aby obliczyć sumę wszystkich liczb
  • Podziel sumę przez liczbę argumentów, aby uzyskać średnią
  • Zwróć średnią jako liczbę

Parametry:

  • ... (liczby): Zmienna liczba argumentów numerycznych

Zwraca: Średnią wszystkich podanych liczb (liczbę)

Spróbuj swoich sił

-- Nie zmieniaj tego kodu --
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(...)
    -- Napisz tutaj kod
end

local average = calculateAverage(unpack(numbers))
print("Average: " .. average)

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Lua online