Funkcijos Lua

Turinys
Funkcijos yra pagrindinis deklaracijų ir išraiškų surinkimo mechanizmas Lua, jie gali atlikti konkrečias užduotis, kurios kitomis kalbomis dažniausiai vadinamos procedūromis ar paprogramėmis.
Funkcijos dažniausiai rašomos skliausteliuose ir argumentų, leidžiančių atlikti konkretų veiksmą, sąrašu, kai gali būti, kad šioms funkcijoms nereikia argumentų, tačiau skliausteliai turi būti nurodyti, pažiūrėkime pavyzdį funkcijų, kurias naudojame kaip išraiškas viduje Lua:

Kaip matome, funkcijas galėtume naudoti abiem aprašytais būdais, tačiau yra ypatingas atvejis, kai funkcija turi vieną argumentą ir šis argumentas yra eilutė literal arba lentelės ar masyvo konstruktorius, šiuo atveju skliausteliai yra neprivalomi, pažiūrėkime:
 spausdinti „Labas pasaulis“ print („Labas pasaulis“) dofile 'file.lua' dofile ('file.lua') print [[kelių eilučių masyvo žinutė]] spausdinti ([[kelių eilučių masyvo žinutė]]) f { var1 = 17, var2 = 30} f ({var1 = 17, var2 = 30}) tipas {} tipas ({})
Remiantis pavyzdžiu, mes galėjome rašyti funkcijas abiem būdais, jie yra vienodai galiojantys.
Programa viduje Lua Galite naudoti funkcijas, apibrėžtas tiek C, tiek pačia kalba, pavyzdžiui, visas standartines funkcijas bibliotekoje Lua yra parašyti C, o tai nėra aktualu kūrėjams, nes abiejų šaukimas neturi jokio skirtumo.
Žinant tai, apibrėžimas nesiskiria nuo kitų kalbų, įprastą funkcijos sintaksę reglamentuoja funkcijos pavadinimas, parametrų sąrašas ir funkcijos turinys, kuris yra deklaracijų sąrašas, pažiūrėkime pavyzdį iliustruok, kas paaiškinta:
 funkcijos operacija (var) vietinė suma = 0 suma = var + 6 grąžinimo sumos pabaiga
Mes jau turime savo funkciją, tačiau tokiu būdu ji nėra labai naudinga, nes ją reikia iškviesti siunčiant reikiamą parametrą, todėl mes galime pridėti dar vieną eilutę prie savo kodo, kad jį iškviestume:
 funkcijos operacija (var) vietinė suma = 0 suma = var + 6 grąžinimo sumos pabaigos spausdinimas (operacija (57))
Jei savo terminale vykdysime savo pavyzdį, pamatysime, kaip mūsų programa gauna parametrą ir pagal mūsų funkcijoje apibrėžtas operacijas grąžina reikšmę:

DIDELIS

Kažką, ką galime išskirti iš funkcijų Lua, yra tai, kad parametrai veikia kaip vietiniai kintamieji, nes jie inicijuojami naudojant reikšmes, kurias jie gauna funkcijų iškvietime. Be to, mes galime iškviesti funkciją su skirtingu funkcijoje apibrėžtų argumentų skaičiumi, Lua prisitaiko prie to taip, kaip tai daro su keliomis užduotimis - tema, kurią aptarėme paskutinėje pamokoje, kur papildomi argumentai atmetami ir papildomi parametrai gauna vertės tipą nulisPavyzdžiui, įsivaizduokime, kad turime šią funkciją:
 funkcija multiple_function (a, b) grąžina a arba b pabaigą
Pažiūrėkime, kaip šioje kodo dalyje mes vadiname funkciją su skirtingais parametrais ir dešinėje pusėje, kaip atliekama priskyrimas:
 f (8) a = 8, b = nulis f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (4 vertė atmetama)
Nors toks elgesys gali sukelti programavimo klaidų, jis taip pat naudingas, ypač numatytiesiems argumentams.
Netradicinė, bet gana naudinga savybė Lua, yra galimybė grąžinti kelis rezultatus, net iš anksto nustatytos kalbos funkcijos gali tai padaryti. To pavyzdys yra funkcija string.find, kuri ieško įvykio modelio tam tikroje eilutėje, ši funkcija grąžina du indeksus, pirmasis yra indeksas, nuo kurio prasideda šis modelis, o antrasis - kur jis baigiasi, pažiūrėkime praktinį šios funkcijos naudojimo pavyzdį, kurį galime puikiai veikia mūsų interaktyvioje konsolėje:

Funkcijos, kuriose rašome Lua jie taip pat gali grįžti kelis rezultatus, todėl turime juos išvardyti tik grįžę, pažiūrėkime pavyzdį, kai sukuriame funkciją, leidžiančią rasti didžiausią masyvo elementų sąrašą ir jo vietą jame:
 funkcija maksimali reikšmė (a) vietinis minimumas = 1 vietinis m = a [minimalus], kai i, val ipairs (a) daryti, jei val> m, tada minimalus = i; m = val pabaigos pabaigos grąža m, minimalus pabaigos spausdinimas (didžiausia vertė ({8,10,23,12,5}))
Kaip matome, mūsų funkcija yra gana paprasta ir grąžindama ji duoda dvi reikšmes, kurios šiuo atveju pagal tai, ką siunčiame, turėtų grąžinti 23 kaip didžiausią skaičių ir 3 kaip poziciją, pažiūrėkime:

DIDELIS

Be daugelio rezultatų grąžinimo funkcionalumo, Lua taip pat galite gauti a kintamas argumentų skaičius, pavyzdžiui, visuose vadovėliuose mes naudojome šią funkciją spausdinti turėdamas vieną, du ir iki trijų argumentų, tai yra, jis gali gauti skirtingą argumentų skaičių, tačiau kaip tai daroma, taip pat gali atsirasti ir mūsų sukurtos funkcijos Lua, Pažvelkime į pavyzdį:
 funkcija example_function (…) local s = 0 i, v in ipairs {…} do s = s + v end return return s end print (example_function (8, 19, 30, 14, 10))
Jei esame savo veiklos apibrėžimo stebėtojai trys taškai (…) skliausteliuose tai rodo, kad mūsų funkcija priima kintamą argumentų skaičių, o kai funkcija vadinama, visi siunčiami argumentai yra renkami viduje ir apdorojami naudojant funkciją ipairsPažvelkime į mūsų funkcijos, kuri yra atsakinga už visų jai siunčiamų argumentų pridėjimą, išvestį:

DIDELIS

Kaip matome šią savybę Lua Tai gana naudinga, nes leidžia mums apibrėžti savo funkciją nežinant, kiek argumentų jai perduosime, netgi galime pasakyti, kad ši funkcija yra šiek tiek panaši į tai, kas daroma su parengtus pareiškimus tvarkyti operacijas su duomenų baze tokiomis kalbomis PHP arba „Java“.
Siunčiami argumentai Lua jis yra pozicinis, tai yra, kai mes iškviečiame funkciją, šie argumentai atitinka parametrus pagal jų pozicijas, pirmasis argumentas atitinka pirmąjį parametrą ir pan., nors kartais nepakenktų nurodyti argumentus pagal pavadinimą.
Ši funkcija yra panaši į kintamuosius argumentus, tačiau apibrėžiant mūsų argumentų pavadinimus, jų tvarkymas yra daug paprastesnis, kai tik naudodami lentelę ar išdėstymą galime atlikti šią funkciją, o tai labai naudinga, jei mūsų funkcija naudoja kai kuriuos iš šių parametrų pasirinktinai, pažiūrėkime šį iškvietimą į funkciją, kuri gauna tam tikrą parametrų skaičių, kad sukurtų langą:
 create_window {x = 0, y = 0, width = 0, height = 200, title = 'Lua Window', background = "blue", kraštai = true}
Tokiu būdu funkcija create_window Jei norite, galite laisvai patikrinti šiuos argumentus pagal pavadinimą, pažiūrėkime, kaip mes gauname šiuos argumentus pagal savo funkciją ir ką galime su jais padaryti:
 funkcija create_window (parinktys) - patikrinkite privalomas parinktis, jei tipas (options.title) ~ = "string", tada klaida ("be pavadinimo") elseif tipas (options.width) ~ = "skaičius", tada klaida ("nėra pločio mato") ) elseif tipas (options.height) ~ = "skaičius", tada klaida ("nėra aukščio matavimo") - mes taikome parinktis create_window (options.title, options.x arba 0, options.y arba 0, options .width, parinktys.aukštis, parinktys.fonas arba "balta", parinktys.briauniai) Pabaiga
Kaip matome, mūsų programų galimybės yra daug didesnės naudojant šią funkciją, ir nors šis pavyzdys yra iliustratyvus, jis leidžia mums pamatyti, kaip mes galime pritaikyti įvardytus argumentus savo funkcijose.
Taip baigiame šią pamoką, kurioje išmokome valdyti funkcijas Lua, pereinant nuo įprastos sintaksės, kurią galime rasti kitomis kalbomis, prie kalbos savybių, tokių kaip keli rezultatai, kintamieji argumentai ir galimybė įvardyti argumentus, kuriuos siunčiame savo funkcijoms. Tokiu būdu pridėdami daug daugiau galios mūsų programoms, įtraukdami tokio tipo funkcijas ir išlaikydami paprastumą Lua mes įpratę.Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave