Mitä ovat upvaluet?
Ymmärtäkää, miten sulkeumat kaappaavat muuttujia ympäröivistä näkyvyysalueista upvalueiksi.
Mitä ovat upvaluet? on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Kertaus: sulkeumat
Sulkeuma on funktio, johon on liitetty viitteet ympäröivän näkyvyysalueen muuttujiin. Näitä talteen otettuja muuttujia kutsutaan upvalueiksi.
Esimerkki upvalue-muuttujasta
Sisempi funktio ottaa ulomman funktion näkyvyysalueelta talteen muuttujan count.
local function makeCounter()
local count = 0
return function()
count = count + 1
return count
end
end
local next = makeCounter()
print(next()) -- 1
print(next()) -- 2Upvaluet ovat eläviä muuttujia
Upvaluet eivät ole kopioita, vaan viittauksia muuttujiin. Sulkeuma voi sekä lukea että kirjoittaa niitä.
Useita upvalueja
Sulkeuma voi kaapata useita muuttujia useista ympäröivistä näkyvyysalueista.
local function adder(x)
return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3)) -- 8Upvaluen elinikä
Upvaluet säilyvät niin kauan kuin jokin niihin viittaava sulkeuma on olemassa. Ne kerätään roskana vasta, kun kaikki niihin viittaavat sulkeumat on kerätty.
debug.getupvalue
Voitte tarkastella upvalueja funktiolla debug.getupvalue(fn, n), joka palauttaa järjestyksessä n:nnen upvaluen nimen ja arvon.
local x = 10
local function f() return x end
print(debug.getupvalue(f, 1)) -- x 10Upvalue ja globaali muuttuja
Upvaluet eli sulkeumien kaappaamat paikalliset muuttujat ovat nopeampia kuin globaalit muuttujat. Virtuaalikone käyttää niitä suoraan indeksin avulla ilman tauluhakua.
Suljettu upvalue
Kun ympäröivä lohko päättyy, upvalue suljetaan: se siirretään pinosta kekomuistiin. Sulkeuma käyttää edelleen samaa kekomuistin solua.
Avoimet ja suljetut upvaluet
Avoin: upvalue on edelleen pinossa (ympäröivä funktio suoritetaan yhä). Suljettu: upvalue on siirretty kekomuistiin ympäröivän näkyvyysalueen päätyttyä.
Käytännön käyttötapaus
Upvaluet toteuttavat luonnostaan sulkeumien yksityisen tilan: moduulifunktio voi säilyttää yksityistä tilaa paljastamatta sitä globaalisti.
local id = 0
local function newId()
id = id + 1
return id
endUpvaluejen lukumäärän rajoitus
Kukin Lua-funktio voi viitata enintään 255 upvalueen. Käytännössä tämä on harvoin ongelma.
Upvalue-kysymys
Mikä on upvalue?
Kertaus: upvaluet
Upvaluet ovat sulkeuman kaappaamia ympäröiviä muuttujia. Ne säilyvät kekomuistissa ympäröivän näkyvyysalueen päätyttyä, jaetaan viittauksina ja mahdollistavat yksityisen muokattavan tilan ilman globaaleja muuttujia.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Mitä ovat upvaluet?” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Mitä ovat upvaluet?”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Mitä ovat upvaluet?”?
Ymmärtäkää, miten sulkeumat kaappaavat muuttujia ympäröivistä näkyvyysalueista upvalueiksi. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Mitä ovat upvaluet?”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Mitä ovat upvaluet?
- Sulkeumien jakamat upvaluet
- Tehdasfunktiot ja generaattorit
- Muistiointi sulkeumilla