Czym są upvalues?
Proszę zrozumieć, jak domknięcia przechwytują zmienne z otaczających zakresów jako upvalues.
Czym są upvalues? to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Podsumowanie domknięć
Domknięcie to funkcja połączona z referencjami do zmiennych z otaczającego zakresu. Przechwycone zmienne nazywają się upvalues.
Przykład upvalue
Funkcja wewnętrzna przechwytuje count z zakresu funkcji zewnętrznej.
local function makeCounter()
local count = 0
return function()
count = count + 1
return count
end
end
local next = makeCounter()
print(next()) -- 1
print(next()) -- 2Upvalues to zmienne aktywne
Upvalues nie są kopiami — są odwołaniami do zmiennej. Domknięcie może je zarówno odczytywać, jak i modyfikować.
Wiele upvalues
Domknięcie może przechwytywać wiele zmiennych z wielu otaczających zakresów.
local function adder(x)
return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3)) -- 8Czas życia upvalues
Upvalues istnieją tak długo, jak długo istnieje dowolne odwołujące się do nich domknięcie. Są usuwane przez garbage collector dopiero wtedy, gdy zostaną usunięte wszystkie odwołujące się do nich domknięcia.
debug.getupvalue
Upvalues można sprawdzać za pomocą debug.getupvalue(fn, n), które zwraca nazwę i wartość n-tego upvalue.
local x = 10
local function f() return x end
print(debug.getupvalue(f, 1)) -- x 10Upvalue a zmienna globalna
Upvalues (zmienne lokalne przechwycone przez domknięcia) są szybsze niż zmienne globalne. VM uzyskuje do nich bezpośredni dostęp przez indeks, bez wyszukiwania w tabeli.
Zamknięty upvalue
Gdy otaczający blok zostaje zakończony, upvalue zostaje zamknięty: przeniesiony ze stosu do sterty. Domknięcie nadal współdzieli tę komórkę na stercie.
Otwarte i zamknięte upvalues
Otwarte: upvalue nadal znajduje się na stosie (otaczająca funkcja wciąż działa). Zamknięte: upvalue zostało przeniesione na stertę po zakończeniu otaczającego zakresu.
Praktyczny przypadek użycia
Upvalues naturalnie implementują prywatny stan w domknięciach — funkcja modułu może przechowywać prywatny stan bez udostępniania go globalnie.
local id = 0
local function newId()
id = id + 1
return id
endLimit liczby upvalues
Każda funkcja Lua może odwoływać się do maksymalnie 255 upvalues. W praktyce rzadko stanowi to problem.
Pytanie o upvalue
Czym jest upvalue?
Podsumowanie: upvalues
Upvalues to zewnętrzne zmienne przechwycone przez domknięcie. Po zakończeniu otaczającego zakresu pozostają na stercie, są współdzielone przez odwołanie i zapewniają prywatny, modyfikowalny stan bez użycia zmiennych globalnych.
Często zadawane pytania
Czy lekcja „Czym są upvalues?” jest bezpłatna?
Tak — pełny tekst „Czym są upvalues?” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Czym są upvalues?”?
Proszę zrozumieć, jak domknięcia przechwytują zmienne z otaczających zakresów jako upvalues. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Czym są upvalues?”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Czym są upvalues?
- Współdzielone upvalues między domknięciami
- Funkcje fabrykujące i generatory
- Memoizacja za pomocą domknięć