Lua Academy · Oppitunti

Mitä ovat upvaluet?

Ymmärtäkää, miten sulkeumat kaappaavat muuttujia ympäröivistä näkyvyysalueista upvalueiksi.

Oppitunti 1/413 vaihetta

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())  -- 2

Upvaluet 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))  -- 8

Upvaluen 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  10

Upvalue 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
end

Upvaluejen 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.

Aloita maksutta

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

  1. Mitä ovat upvaluet?
  2. Sulkeumien jakamat upvaluet
  3. Tehdasfunktiot ja generaattorit
  4. Muistiointi sulkeumilla
← Takaisin: Lua Academy