Съдържание
Функциите са основният механизъм за извличане на декларации и изрази в Луа, те могат да изпълняват специфични задачи, които се наричат най -вече процедури или подпрограми на други езици.Функциите в повечето случаи са написани с скоби и списък с аргументи, които ще му позволят да извърши конкретно действие, където може да се окаже, че тези функции не се нуждаят от аргументи, но скобите трябва да бъдат посочени, нека да видим пример на функции, които използваме като изрази вътре Луа:
print "Hello World" print ("Hello World") dofile 'file.lua' dofile ('file.lua') print [[многоредов масив msg]] print ([[многоредов масив msg]]) f { var1 = 17, var2 = 30} f ({var1 = 17, var2 = 30}) тип {} тип ({})Според примера успяхме да напишем функциите по двата начина, като те са еднакво валидни.
Програма в Луа Можете да използвате функции, дефинирани както в C, така и в самия език, например всички стандартни функции в библиотеката на Луа са написани на ° С, което не е от значение за разработчиците, тъй като извикването и на двете няма разлика.
Знаейки това, дефиницията не се различава от другите езици, конвенционалният синтаксис на функция се управлява от името на функцията, списък с параметри и тялото на функцията, което е списък с декларации, нека видим пример за илюстрирайте обяснението:
функция операция (var) локална сума = 0 сума = var + 6 връщане на края на суматаВече имаме нашата функция, но по този начин тя не е много полезна, тъй като тя трябва да бъде извикана чрез изпращане на необходимия параметър, за това можем да добавим още един ред към нашия код, за да го извикаме:
функция операция (var) локална сума = 0 сума = var + 6 връщане на края край печат (операция (57))Ако изпълним нашия пример в нашия терминал, можем да видим как нашата програма получава параметъра и според операциите, дефинирани в нашата функция, връща стойност:
Увеличете
функция multiple_function (a, b) връщане a или b крайНека да видим как в следната кодова част извикваме функцията с различни параметри и от дясната страна как се изпълнява присвояването:
f (8) a = 8, b = нула f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (Стойността 4 се отхвърля)Въпреки че това поведение може да доведе до програмни грешки, то също е полезно, особено за аргументи по подразбиране.
Нестандартна, но доста полезна функция на Луа, е възможността за връщане на множество резултати, дори предварително зададени езикови функции могат да направят това. Пример за това е функцията низ.намери, който търси модел на възникване в даден низ, тази функция връща два индекса, първият е индексът, където този модел започва, а вторият е мястото, където завършва, нека видим практически пример за използването на тази функция, който можем направете перфектно в нашата интерактивна конзола:
максимална стойност на функцията (а) локален минимум = 1 локален m = a [минимум] за i, val в ipairs (а) направете, ако val> m, тогава минимум = i; m = връщане на края на клапана m, минимално отпечатване на края (максимална стойност ({8,10,23,12,5}))Както виждаме, нашата функция е доста проста и при връщането си връща две стойности, които в този случай според това, което изпращаме, трябва да върнем 23 като най -голямо число и 3 като позиция, нека видим:
Увеличете
function example_function (…) local s = 0 за i, v в ipairs {…} do s = s + v end return s end print (example_function (8, 19, 30, 14, 10))Ако ние сме наблюдатели в дефиницията на нашата функция, ние имаме три точки (…) вътре в скобите, това показва, че нашата функция приема променлив брой аргументи и когато функцията се извика, всички изпратени аргументи се събират вътрешно и след това се обработват с функцията ipairsНека видим резултата от нашата функция, която отговаря за добавянето на всички аргументи, изпратени до нея:
Увеличете
Изпращане на аргументи в Луа той е позиционен, тоест когато извикваме функция, тези аргументи отговарят на параметрите според техните позиции, първият аргумент съответства на първия параметър и така нататък, въпреки че понякога не би навредило да посочим аргументите по име.
Тази функционалност е подобна на променливите аргументи, но когато дефинираме имената на нашите аргументи, боравенето с тях е много по -лесно, където само с помощта на таблица или подредба можем да направим тази функционалност, нещо, което е много полезно, ако нашата функция използва някои от тези параметри по избор, нека видим следното извикване на функция, която получава определено количество параметри за изграждане на прозорец:
create_window {x = 0, y = 0, width = 0, height = 200, title = 'Lua Window', background = "blue", border = true}По този начин функцията create_window Можете да проверите тези аргументи по име, ако желаете, нека видим как приемаме тези аргументи в нашата функция и какво можем да направим с нея:
функция create_window (опции) - проверете задължителните опции, ако тип (options.title) ~ = "низ" след това грешка ("без заглавие") иначе ако тип (options.width) ~ = "номер" след това грешка ("няма мярка за ширина" ) elseif type (options.height) ~ = "number", след това грешка ("no height height") end - прилагаме опциите create_window (options.title, options.x или 0, options.y или 0, options .width, options.height, options.background или "white", options.edges) КрайКакто виждаме, възможностите в нашите програми са много по -големи с тази функционалност и въпреки че този пример е илюстративен, той ни позволява да видим как можем да приложим посочените аргументи в рамките на нашите функции.
Така приключваме този урок, където научихме как да боравим с функции в Луа, преминавайки от конвенционалния синтаксис, който можем да намерим в други езици, до характеристиките на езика, като например множество резултати, променливи аргументи и възможността за именуване на аргументите, които изпращаме на нашите функции. По този начин добавянето на много повече мощност към нашите програми чрез включване на тези типове функции и поддържане на простотата, към която Луа ние сме свикнали.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка