Funkcje anonimowe
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 13 z 54.
Skoro rozumiesz już, że funkcje można przechowywać w zmiennych i przekazywać, poznaj jeszcze zwięźlejszy sposób ich zapisywania. Zamiast zawsze nadawać funkcji nazwę, możesz utworzyć ją bezpośrednio tam, gdzie jej potrzebujesz. Nazywamy je funkcjami anonimowymi.
Funkcja anonimowa to po prostu funkcja bez nazwy. Definiujesz ją za pomocą słowa kluczowego function, po którym bezpośrednio podajesz jej parametry i treść:
function(a, b)
return a + b
endTworzy to wartość funkcji, której można od razu użyć. Funkcje anonimowe są szczególnie przydatne, gdy przekazujesz funkcje jako argumenty do innych funkcji. Pamiętasz przykład niestandardowego sortowania z wcześniejszej części? Oto jak wygląda z funkcją anonimową:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Zamiast definiować osobną nazwaną funkcję do porównywania, funkcja jest tworzona bezpośrednio jako drugi argument funkcji table.sort(). Dzięki temu kod jest bardziej zwięzły, a logika sortowania znajduje się dokładnie tam, gdzie jest używana.
Wyzwanie
ŁatwyNapisz funkcję filterByThreshold, która przyjmuje numbers i threshold oraz zwraca nową tablicę zawierającą tylko liczby większe od progu.
Użyj table.insert() i podejścia z funkcją anonimową, aby filtrować liczby. Utwórz logikę filtrowania bezpośrednio, nie definiując osobnej funkcji nazwanej.
Logika:
- Utwórz pustą tablicę wynikową
- Przejdź przez tablicę liczb
- Dla każdej liczby użyj funkcji anonimowej, aby sprawdzić, czy przekracza próg
- Jeśli sprawdzenie zwróci true, dodaj liczbę do tablicy wynikowej
- Zwróć przefiltrowaną tablicę wynikową
Parametry:
numbers(tablica): Tablica w formie listy zawierająca wartości liczbowethreshold(liczba): Wartość minimalna (wyłączna) używana do filtrowania
Zwraca: Tablicę zawierającą tylko liczby większe od progu (tablica)
Spróbuj swoich sił
function filterByThreshold(numbers, threshold)
-- Wpisz tutaj kod
end
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
1Zaawansowane iterowanie po tabelach
Iterowanie za pomocą pairs()Iterowanie za pomocą ipairs()pairs() a ipairs()Powtórka — karta postaci2Więcej funkcji biblioteki table
table.concat()Tworzenie tabel i unpack()table.sort()Sortowanie niestandardowe za pomocą funkcjiPodsumowanie — tablica najlepszych wyników5Projekt: silnik tekstowej gry przygodowej
Konfiguracja projektu: pokójŁączenie pokoi3Zaawansowane koncepcje funkcji
Zwracanie wielu wartościFunkcje wariadyczne (...)Funkcje jako wartości pierwszej klasyFunkcje anonimoweCzym jest domknięcie?Podsumowanie — prosty obsługiwacz zdarzeńPoćwicz samodzielnie: Kompilator Lua online