Функции в Lua

Съдържание
Функциите са основният механизъм за извличане на декларации и изрази в Луа, те могат да изпълняват специфични задачи, които се наричат ​​най -вече процедури или подпрограми на други езици.
Функциите в повечето случаи са написани с скоби и списък с аргументи, които ще му позволят да извърши конкретно действие, където може да се окаже, че тези функции не се нуждаят от аргументи, но скобите трябва да бъдат посочени, нека да видим пример на функции, които използваме като изрази вътре Луа:

Както виждаме, можем да използваме функции и по двата описани начина, но има специален случай, при който функцията има един аргумент и този аргумент е низов литерал или конструктор за таблица или масив, в този случай скобите не са задължителни, нека видим:
 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 като позиция, нека видим:

Увеличете

В допълнение към функционалността за връщане на множество резултати, Луа можете също да получите a променлив брой аргументи, например през всички уроци сме използвали функцията печат с един, два и до три аргумента, тоест, той може да получи променлив брой аргументи, но както това става, така и функциите, които разработваме в Луа, Нека разгледаме пример за това:
 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Нека видим резултата от нашата функция, която отговаря за добавянето на всички аргументи, изпратени до нея:

Увеличете

Както виждаме тази характеристика на Луа Това е доста полезно, тъй като ни позволява да дефинираме нашата функция, без да знаем колко аргументи ще й предадем, дори можем да кажем, че тази функционалност е малко подобна на това, което се прави с подготвени изявления за обработка на операции с база данни на езици като PHP или Java.
Изпращане на аргументи в Луа той е позиционен, тоест когато извикваме функция, тези аргументи отговарят на параметрите според техните позиции, първият аргумент съответства на първия параметър и така нататък, въпреки че понякога не би навредило да посочим аргументите по име.
Тази функционалност е подобна на променливите аргументи, но когато дефинираме имената на нашите аргументи, боравенето с тях е много по -лесно, където само с помощта на таблица или подредба можем да направим тази функционалност, нещо, което е много полезно, ако нашата функция използва някои от тези параметри по избор, нека видим следното извикване на функция, която получава определено количество параметри за изграждане на прозорец:
 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) Край
Както виждаме, възможностите в нашите програми са много по -големи с тази функционалност и въпреки че този пример е илюстративен, той ни позволява да видим как можем да приложим посочените аргументи в рамките на нашите функции.
Така приключваме този урок, където научихме как да боравим с функции в Луа, преминавайки от конвенционалния синтаксис, който можем да намерим в други езици, до характеристиките на езика, като например множество резултати, променливи аргументи и възможността за именуване на аргументите, които изпращаме на нашите функции. По този начин добавянето на много повече мощност към нашите програми чрез включване на тези типове функции и поддържане на простотата, към която Луа ние сме свикнали.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка
wave wave wave wave wave