Useat paluuarvot
Palauttakaa ja tallentakaa useita arvoja yhdestä funktiokutsusta.
Useat paluuarvot on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
Usean arvon palauttaminen
Toisin kuin useimmissa kielissä, Lua-funktiot voivat palauttaa useita arvoja natiivisti yhdestä return-lauseesta. Useat arvot erotetaan pilkuilla return-sanan jälkeen. Tällöin ei tarvita kääreobjekteja tai tulosparametreja.
local function divmod(a, b)
return math.floor(a / b), a % b
end
local quotient, remainder = divmod(17, 5)
print(quotient, remainder) -- 3 2Palautettujen arvojen mukauttaminen
Lua mukauttaa palautettujen arvojen määrän vastaanottajien määrää vastaavaksi. Ylimääräiset arvot hylätään ja puuttuvien arvojen tilalle tulee nil. Tämä mukautus tapahtuu aina, kun funktiokutsu ei ole lausekelistan viimeinen lauseke — kyseisessä kohdassa säilytetään vain ensimmäinen arvo.
local function triple()
return 10, 20, 30
end
local a, b, c = triple()
print(a, b, c) -- 10 20 30
local x, y = triple()
print(x, y) -- 10 20 (30 discarded)
local p = triple()
print(p) -- 10 (only first when 1 var)Keskellä olevan kohdan mukautus
Kun funktiokutsu on lausekelistan keskellä (ei viimeisessä kohdassa), Lua lyhentää sen yhdeksi arvoksi. Vain listan viimeinen lauseke voi tuottaa useita arvoja.
local function pair()
return 1, 2
end
-- pair() in middle: only 1 value used
local t = {pair(), pair()}
print(#t, t[1], t[2], t[3]) -- 3 1 1 2
-- first pair() gives just 1; last pair() gives 1,2
-- pair() at end: all values used
local t2 = {10, pair()}
print(#t2, t2[1], t2[2], t2[3]) -- 3 10 1 2Sulkeet pakottavat yhden arvon
Funktiokutsun ympäröiminen sulkeilla pakottaa sen palauttamaan täsmälleen yhden arvon. Tästä on hyötyä, kun haluatte vain ensimmäisen palautetun arvon riippumatta siitä, kuinka monta arvoa funktio tuottaa.
local function coords()
return 10, 20, 30
end
print(coords()) -- 10 20 30 (all three)
print((coords())) -- 10 (parentheses: single value only)
local x = (coords())
print(x) -- 10string.find-funktion palauttamat arvot
Monet standardikirjaston funktiot käyttävät useita palautusarvoja. string.find palauttaa osuman alku- ja loppusijainnit (sekä kaappaukset). math.modf palauttaa kokonaisluku- ja murto-osan. Näiden mallien ymmärtäminen auttaa käyttämään standardikirjastoa sujuvasti.
local s = "hello world"
local start, finish = string.find(s, "world")
print(start, finish) -- 7 11
-- math.modf: integer and fractional parts
local int, frac = math.modf(3.75)
print(int, frac) -- 3 0.75Arvojen kaappaaminen table.pack-funktiolla
table.pack(...) kaappaa kaikki argumentit (tai ...-syntaksin kautta palautetut arvot) taulukkoon. Taulukossa on n-kenttä, joka sisältää kokonaismäärän myös nil-arvot mukaan lukien. Näin täsmällinen määrä säilyy, toisin kuin #-operaattoria käytettäessä, sillä se pysähtyy ensimmäiseen aukkoon.
local function getData()
return "Alice", 30, nil, true
end
local t = table.pack(getData())
print(t.n) -- 4
print(t[1]) -- Alice
print(t[2]) -- 30
print(t[3]) -- nil
print(t[4]) -- truetable.unpack arvojen levittämiseen
table.unpack(t, i, j) palauttaa taulukon alkiot yksittäisinä arvoina. Se on table.pack-funktion käänteisoperaatio. Käyttäkää sitä taulukon sisällön välittämiseen funktion argumenteiksi tai arvojen levittämiseen return-lauseessa.
local args = {10, 20, 30}
local function sum3(a, b, c)
return a + b + c
end
print(sum3(table.unpack(args))) -- 60
-- Use in return
local function passThrough(t)
return table.unpack(t)
end
print(passThrough({5, 6, 7})) -- 5 6 7Virheiden ilmoittaminen palautusarvoilla
Lua-kielessä yleinen käytäntö on palauttaa epäonnistumisen yhteydessä nil, errorMessage ja onnistumisen yhteydessä tulos. Kutsuja tarkistaa ensimmäisen palautusarvon: jos se on nil, tapahtui virhe. Näin poikkeuksia ei tarvita odotettavissa olevien virhetilanteiden käsittelyyn.
local function openConfig(path)
local f = io.open(path, "r")
if not f then
return nil, "cannot open: " .. path
end
local content = f:read("*a")
f:close()
return content
end
local data, err = openConfig("config.lua")
if not data then
print("Error:", err)
endArvojen vaihtaminen useilla palautusarvoilla
Useat palautusarvot ratkaisevat vaihtamisongelman elegantisti. Oikea puoli arvioidaan ennen sijoittamista, joten a, b = b, a vaihtaa arvot oikein ilman väliaikaista muuttujaa.
local a, b = 5, 10
print(a, b) -- 5 10
a, b = b, a
print(a, b) -- 10 5
-- Works for three-way rotation too
local x, y, z = 1, 2, 3
x, y, z = z, x, y
print(x, y, z) -- 3 1 2pcall-funktion palautuskäytäntö
pcall(f, ...) käyttää itse useita palautusarvoja: ensimmäinen arvo on totuusarvo (true, jos suoritus onnistui, ja false, jos tapahtui virhe), ja seuraavat arvot ovat joko funktion f palautusarvoja tai virheilmoitus. Tarkistakaa aina ensimmäinen palautusarvo ennen muiden käyttämistä.
local function risky(x)
if x < 0 then error("negative input") end
return math.sqrt(x)
end
local ok, result = pcall(risky, 16)
print(ok, result) -- true 4.0
ok, result = pcall(risky, -1)
print(ok, result) -- false input:2: negative inputPikatarkistus
Mitä print((string.find("hello", "ll"))) tulostaa?
Kertaus: Useat palautusarvot
Tärkeimmät opit:
- Palauttakaa useita arvoja:
return a, b, c - Ylimääräiset arvot hylätään ja puuttuvien tilalle tulee nil
- Keskellä olevat funktiokutsut lyhennetään yhdeksi arvoksi
(f())pakottaa palauttamaan täsmälleen yhden arvontable.pack/table.unpackdynaamisille arvolistoille- Käytäntönä epäonnistumisesta palautetaan
nil, errmsg
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 ”Useat paluuarvot” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Useat paluuarvot”. 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 ”Useat paluuarvot”?
Palauttakaa ja tallentakaa useita arvoja yhdestä funktiokutsusta. 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 2/4.
Kuinka kauan ”Useat paluuarvot”-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.