Funkcje jako wartości pierwszej klasy
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 12 z 54.
W Lua funkcje to coś więcej niż tylko bloki kodu wykonujące zadania. Są wartościami, z którymi można postępować tak jak z każdym innym typem danych. Oznacza to, że możesz pracować z funkcjami tak samo jak z liczbami, ciągami znaków lub tabelami.
Możesz przechowywać funkcję w zmiennej:
local greet = function()
print("Hello!")
end
greet() -- Wynik: Hello!Tutaj funkcja jest przypisana do zmiennej greet i możesz ją wywoływać tak jak każdą zwykłą funkcję. Otwiera to wiele możliwości w zakresie strukturyzowania kodu.
Funkcje można również przekazywać jako argumenty do innych funkcji. Jest to szczególnie przydatne, gdy chcesz, aby jedna funkcja korzystała z zachowania zdefiniowanego w innej:
function executeAction(action)
action()
end
local sayHello = function()
print("Hello from a function!")
end
executeAction(sayHello) -- Wynik: Hello from a function!W tym przykładzie executeAction otrzymuje funkcję jako parametr i ją wywołuje. Funkcja sayHello jest przekazywana tak samo, jak przekazujesz liczbę lub ciąg znaków.
Funkcje mogą nawet zwracać inne funkcje. Dzięki temu możesz tworzyć funkcje dynamicznie na podstawie określonych warunków lub parametrów:
function createMultiplier(factor)
return function(number)
return number * factor
end
end
local double = createMultiplier(2)
print(double(5)) -- Wynik: 10Wyzwanie
ŁatwyNapisz funkcję applyOperation, która przyjmuje a, b i operation, a następnie zwraca wynik zastosowania funkcji operacji do tych dwóch liczb.
Parametr operation to tabela zawierająca funkcję, która zostanie wywołana z argumentami a i b.
Logika:
- Pobierz funkcję z tabeli
operationza pomocą klucza"func" - Wywołaj tę funkcję z argumentami
aib - Zwróć wynik
Parametry:
a(liczba): Pierwsza liczbab(liczba): Druga liczbaoperation(tabela): Tabela zawierająca funkcję zapisaną pod kluczem"func"
Zwraca: Wynik wywołania funkcji operacji z argumentami a i b (liczba)
Spróbuj swoich sił
function applyOperation(a, b, operation)
-- Wpisz kod tutaj
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