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:
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 pabaigaMes 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
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:
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
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
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) PabaigaKaip 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ą