Obsah
Funkce jsou hlavním mechanismem pro abstrakci deklarací a výrazů v Lua, mohou provádět konkrétní úkoly, kterým se v jiných jazycích většinou říká procedury nebo podprogramy.Funkce jsou většinou psány se závorkami a seznamem argumentů, které mu umožní provést konkrétní akci, kde může nastat situace, že tyto funkce nepotřebují argumenty, nicméně závorky musí být zadány, podívejme se na příklad funkcí, které uvnitř používáme jako výrazy Lua:
tisk "Hello World" print ("Hello World") dofile 'file.lua' dofile ('file.lua') print [[víceřádkové pole msg]] tisk ([[víceřádkové pole msg]]) f { var1 = 17, var2 = 30} f ({var1 = 17, var2 = 30}) typ {} typ ({})Podle příkladu jsme byli schopni zapsat funkce oběma způsoby, které jsou stejně platné.
Program v Lua Můžete použít funkce definované jak v C, tak v samotném jazyce, například všechny standardní funkce v knihovně Lua jsou zapsány v C, což není pro vývojáře relevantní, protože vyvolání obou nemá žádný rozdíl.
Když to víme, definice se neliší od ostatních jazyků, konvenční syntaxe funkce se řídí názvem funkce, seznamem parametrů a tělem funkce, což je seznam deklarací, podívejme se na příklad ilustrujte, co bylo vysvětleno:
funkce operace (var) místní součet = 0 součet = var + 6 návrat součtu konecSvou funkci již máme, nicméně ta cesta není příliš užitečná, protože je třeba ji vyvolat odesláním parametru, který potřebuje, proto můžeme do našeho kódu přidat ještě jeden řádek pro její vyvolání:
funkce operace (var) místní součet = 0 součet = var + 6 návrat součtu konec tisku (operace (57))Pokud spustíme náš příklad na našem terminálu, uvidíme, jak náš program parametr přijme a podle operací definovaných v rámci naší funkce vrátí hodnotu:
ZVĚTŠIT
function multiple_function (a, b) return a or b endPodívejme se, jak v následující části kódu voláme funkci s různými parametry a na pravé straně, jak se provádí přiřazení:
f (8) a = 8, b = nula f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (hodnota 4 je vyřazena)Ačkoli toto chování může vést k programovacím chybám, je také užitečné, zejména pro výchozí argumenty.
Netradiční, ale docela užitečná funkce Lua, je schopnost vrátit více výsledků, dokonce i předdefinované jazykové funkce to dokážou. Příkladem toho je funkce string.find, která hledá vzorec výskytu v daném řetězci, tato funkce vrací dva indexy, první je index, kde tento vzor začíná a druhý je tam, kde končí, podívejme se na praktický příklad použití této funkce, který můžeme perfektně v naší interaktivní konzoli:
funkce maximální hodnota (a) lokální minimum = 1 lokální m = a [minimum] pro i, val v ipairech (a) proveďte pokud val> m, pak minimum = i; m = návratnost konce konce m, minimální konec tisku (maximální hodnota ({8,10,23,12,5}))Jak vidíme, naše funkce je docela jednoduchá a v našem návratu vrací dvě hodnoty, které v tomto případě podle toho, co posíláme, bychom měli vrátit 23 jako největší číslo a 3 jako pozici, podívejme se:
ZVĚTŠIT
funkce example_function (…) local s = 0 for i, v in ipairs {…} do s = s + v end return s end print (example_function (8, 19, 30, 14, 10))Pokud jsme pozorovateli v definici naší funkce, máme tři body (…) uvnitř závorek to znamená, že naše funkce přijímá proměnný počet argumentů, a když je funkce volána, všechny odeslané argumenty jsou shromažďovány interně a poté zpracovány pomocí funkce dvojicePodívejme se na výstup naší funkce, která má na starosti přidání všech do ní zaslaných argumentů:
ZVĚTŠIT
Odesílání argumentů v Lua je poziční, to znamená, že když vyvoláme funkci, tyto argumenty odpovídají parametrům podle jejich pozic, první argument odpovídá prvnímu parametru a tak dále, i když někdy by nebylo na škodu specifikovat argumenty jménem.
Tato funkce je podobná proměnným argumentům, ale při definování názvů pro naše argumenty je manipulace s nimi mnohem jednodušší, kde pouhou pomocí tabulky nebo uspořádání můžeme tuto funkci provést, což je velmi užitečné, pokud naše funkce používá některé z těchto parametrů volitelně se podívejme na následující volání funkce, která obdrží určité množství parametrů pro vytvoření okna:
create_window {x = 0, y = 0, width = 0, height = 200, title = 'Lua Window', background = "blue", border = true}Tímto způsobem funkce create_window Pokud si přejete, můžete tyto argumenty zkontrolovat podle jména, podívejme se, jak tyto argumenty v naší funkci přijímáme a co s tím můžeme dělat:
funkce create_window (možnosti) - zaškrtněte povinné možnosti, pokud typ (options.title) ~ = "řetězec" pak chyba ("žádný název") elseif typ (možnosti.šířka) ~ = "číslo" pak chyba ("žádná míra šířky" ) elseif typ (options.height) ~ = "number" then error ("no height measurement") end - použijeme možnosti create_window (options.title, options.x or 0, options.y or 0, options .width, options.height, options.background or "white", options.edges) KonecJak vidíme, možnosti v našich programech jsou s touto funkcí mnohem větší, a přestože je tento příklad ilustrativní, umožňuje nám vidět, jak můžeme pojmenované argumenty použít v rámci našich funkcí.
Tímto ukončíme tento tutoriál, kde jsme se naučili zacházet s funkcemi Lua, od konvenční syntaxe, kterou můžeme najít v jiných jazycích, k charakteristikám jazyka, jako jsou vícenásobné výsledky, proměnné argumenty a možnost pojmenování argumentů, které posíláme našim funkcím. Tímto způsobem přidáme do našich programů mnohem více energie zahrnutím těchto typů funkcí a zachováním jejich jednoduchosti Lua jsme na to zvyklí.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod