Το Lua έχει εδραιωμένη φήμη ως ημι-γλώσσα, ένα εργαλείο που μπορεί, κατά καιρούς, να ενσωματωθεί για να γράψει μια εφαρμογή γραμμένη σε μια μεταγλωττισμένη γλώσσα όπως η C++. Ωστόσο, η Lua είναι μια εντελώς ανεξάρτητη γλώσσα που έχει τον δικό της διερμηνέα, τη δυνατότητα δημιουργίας ενοτήτων, μεγάλος αριθμόςβιβλιοθήκες, και ταυτόχρονα, αυτό το PL έχει το ελάχιστο μέγεθος μεταξύ των αναλόγων. Με απλά λόγια, έχουμε τα πάντα για να δημιουργήσουμε τις ίδιες εφαρμογές όπως στην perl, την python και γενικά σε οποιαδήποτε άλλη κοινή γλώσσα προγραμματισμού.

Μπορώ να σας προσφέρω τους ακόλουθους λόγους για τον Λούα:

  • - οι εφαρμογές θα είναι εύκολα φορητές μεταξύ Windows και Linux (όχι το γεγονός ότι ο κώδικας θα λειτουργεί χωρίς αλλαγές, αλλά η μεταφορά θα είναι ανώδυνη εάν δεν χρησιμοποιούνται βιβλιοθήκες για συγκεκριμένη πλατφόρμα)
  • - μικρό γενικό κόστος δημιουργημένων προγραμμάτων
  • - υψηλή ταχύτηταεργασία και λήψη εφαρμογών
  • - τη δυνατότητα να "κολλήσετε" γρήγορα οποιαδήποτε βιβλιοθήκη C στην εφαρμογή σας - δεν θα βρείτε καλύτερη "κόλλα" για βιβλιοθήκες
  • - ωραία μινιμαλιστική σύνταξη της γλώσσας, με δυνατότητα εφαρμογής σύγχρονων παραδειγμάτων προγραμματισμού σε αυτήν
  • - Τα προγράμματα Lua είναι πολύ εύκολο να αναπτυχθούν
  • - χαμηλή κατανάλωση μνήμης

Για να δείξω τη δύναμη του Lua, θα σας δείξω πώς να χρησιμοποιήσετε το Lua για να δημιουργήσετε μικρό πρόγραμμαγια δημιουργία γραφημάτων ανά σημεία με δυνατότητα αποθήκευσης του γραφήματος ως αρχείο εικόνας.

Ως γραφική εργαλειοθήκη, θα χρησιμοποιήσουμε το iup - μια βιβλιοθήκη πολλαπλών πλατφορμών, που δημιουργήθηκε αρχικά με την προσδοκία χρήσης της από τη Lua.

Εγκατάσταση Lua SDK
Ως μέρος της ιδέας χρήσης της Lua ως ανεξάρτητης γλώσσας προγραμματισμού, δημιουργήθηκε η συναρμολόγηση Lua για Windows, η οποία περιέχει τις απαραίτητες βιβλιοθήκες για καθημερινές εργασίες που προκύπτουν κατά τον προγραμματισμό για το καθορισμένο λειτουργικό σύστημα: εργασία με τη βάση δεδομένων, GUI, ανάλυση XML , και τα λοιπά. Μην ντρέπεστε που η έκδοση του Lua είναι σε assembly 5.1 και όχι 5.2 - δεν υπάρχει μεγάλη διαφορά μεταξύ τους στην περίπτωσή μας.

Κατεβάστε και εγκαταστήστε το build.

Σύντομη περιγραφή της έννοιας iup
Σκέφτηκα για πολύ καιρό πώς να περιγράψω τη διαδικασία δημιουργίας ενός προγράμματος χωρίς να μπω σε λεπτομέρειες για τη συσκευή iup. Και αποφάσισα να περιγράψω εν συντομία τις βασικές αρχές του:
  • - Το iup.dialog είναι το ριζικό στοιχείο της διεπαφής προγράμματος - όλα τα στοιχεία τοποθετούνται σε αυτό το κοντέινερ
  • - η τοποθέτηση στοιχείων σε ένα κοντέινερ γίνεται με τη χρήση διατάξεων: καθορισμός κανόνων για την τοποθέτηση ενός στοιχείου σε ένα δοχείο. Το ίδιο το Iup θα τοποθετήσει και θα σχεδιάσει το στοιχείο σύμφωνα με τους κανόνες. Τα κύρια δοχεία είναι πλαίσιο, κατακόρυφο μέγεθος, οριζόντιο μέγεθος.
  • - Οι χειριστές συμβάντων ορίζονται ως συναρτήσεις που συνδέονται με το γραφικό στοιχείο
  • - μετά τη δημιουργία του διαλόγου, ξεκινά ο βρόχος συμβάντος
Εάν έχετε γράψει για GUI στο παρελθόν με Tk, WxWidgets ή WinAPI, όλα αυτά θα σας φανούν γνωστά. Εάν όχι, το πρόγραμμα καλύπτεται λεπτομερώς με σχόλια.
Κωδικός προγράμματος

Σύνδεση βιβλιοθηκών iup require("iuplua") require("iupluacontrols") require("iuplua_pplot") -- βιβλιοθήκη για εργασία με το Canvas για την αποθήκευση του γραφήματος σε ένα αρχείο require("cdlua") require("iupluacd") require(" string ") -- καθολικές μεταβλητές για γραφικά στοιχεία και ρυθμίσεις προγράμματος -- μέγιστος αριθμός γραφημάτων plots_number = 5 -- γραφικά στοιχεία καρτελών όπου θα τοποθετούνται γραφικά στοιχεία εισαγωγής δεδομένων για κάθε διάγραμμα καρτέλες = () -- δοχεία γραφικών στοιχείων vboxes = () -- πλαίσια ελέγχου για επιλέξτε ποιες γραφικές παραστάσεις θα δημιουργηθούν πλαίσια ελέγχου = () -- αποθήκευση γραφικών στοιχείων με κείμενο δεδομένων σχετικά με σημεία εδώ συντεταγμένες = () -- γραφικά στοιχεία ετικετών για κάθε υπόμνημα γραφικής παράστασης = () -- γραφικά στοιχεία χαρακτηρισμού αξόνων συντεταγμένων global_legend = () -- στο κρίμα , δεν υπάρχει τυπική συμβολοσειρά συνάρτησης διαχωρισμού Lua:split(sep) local sep, fields = sep ή ":", () local pattern = string.format("([^%s]+)", sep) self :gsub (μοτίβο, πεδία συνάρτησης(γ)[#fields+1] = c end) πεδία επιστροφής τέλος -- η συνάρτηση σχεδιάζει ένα γράφημα στον σχεδιογράφο στα καθορισμένα σημεία συνάρτηση ion draw_plot(pwidget, pnum, data) x = data.value:split(",") y = data.value:split(",") if checkboxes.value == "(!LANG:OFF" then return end if not (#x == #y) or #x == 0 then iup.Message("Ошибка", "Задано неверное число точек для графика " .. pnum) return end iup.PPlotBegin(pwidget, 0) iup.PPlotAdd(pwidget, 0, 0) for i = 1,#x do iup.PPlotAdd(pwidget, x[i], y[i]) end iup.PPlotEnd(pwidget) end -- виджет отвечающий за кнопку построения графика plot_btn = iup.button{ title = "Χτίζω"} -- колбэк для кнопки "построить график" function plot_btn:action() -- создать виджет графопостроителя plot = iup.pplot { expand="YES", TITLE = "απλή γραμμή", MARGINBOTTOM="65", MARGINLEFT="65", AXS_XLABEL = global_legend.value, AXS_YLABEL = global_legend.value, LEGENDSHOW="YES", LEGENDPOS="TOPLEFT", size = "400x300" } -- этот блок для обхода бага - без него подпись к первому графику отображаться не будет iup.PPlotBegin(plot, 0) iup.PPlotAdd(plot,0,0) plot.DS_LEGEND = "" iup.PPlotEnd(plot) -- обходим виджеты с данными for i = 1, plots_number do -- чтобы свеженарисованный графи отобразился с правильной подписью print(legends[i].value) plot.DS_LEGEND = legends[i].value -- рисуем график draw_plot(plot, i, coords[i]) end -- кнопка сохранения графика в картинку на диске save_btn = iup.button{ title = "Σώσει" } -- теперь создаем само окно, где будет отображаться график plot_dg = iup.dialog { iup.vbox -- это вертикальный сайзер, помести в него графопостроитель и кнопку { plot, save_btn }, } -- обработчик кнопки сохранения графика function save_btn:action() -- создаем диалог выбора имени файла ля сохранения -- в связи с ограничениями библиотеки сохранять можно только в EMF fs_dlg = iup.filedlg{DIALOGTYPE = "SAVE", FILTER = "*.emf" } iup.Popup(fs_dlg) -- если файл выбран if tonumber(fs_dlg.STATUS) >= 0 then -- дописать при необходимости !} επιθυμητή επέκταση pic = fs_dlg.value αν όχι (string.sub(pic, string.len(pic)-3) == ".emf") τότε pic = pic .. ".emf" τέλος -- δημιουργήστε έναν ψευδοκαμβά που σχετίζεται με το αρχείο tmp_cv = cd.CreateCanvas(cd.EMF, pic .. "400x300") -- σχεδίαση σε καμβά iup.PPlotPaintTo(plot, tmp_cv) -- αποθήκευση δεδομένων στο αρχείο cd.KillCanvas(tmp_cv) τέλος τέλος -- εμφάνιση διαλόγου plot_dg: showxy(iup.CENTER, iup.CENTER) -- εκτελέστε τον βρόχο συμβάντων για το παράθυρο διαλόγου if (iup.MainLoopLevel()==0) στη συνέχεια τέλος τέλος iup.MainLoop() -- στον βρόχο δημιουργήστε καρτέλες στις οποίες θα τοποθετήσουμε widgets -- για τη συλλογή δεδομένων για i=1,plots_number do -- δημιουργία γραφικών στοιχείων κειμένου όπου οι συντεταγμένες των σημείων θα εισαχθούν coords[i] = () για j = 1,2 do coords[i][j] = iup .text ( expand="HORIZONTAL", multiline = "YES", VISIBLELINES = 5 ) τέλος -- γραφικό στοιχείο για την επεξεργασία λεζάντων γραφήματος[i] = iup.text( expand = "ΟΡΙΖΟΝΤΙΑ" ) -- δημιουργία κοντέινερ καρτελών και συμπλήρωση vboxes στοιχείων του [i] = iup.vbox (i up.hbox ( iup.label ( τίτλος = "(!LANG:Ετικέτα γραφήματος:" }, legends[i] }, iup.hbox { iup.label { title="Χ:", }, coords[i] }, iup.hbox { iup.label { title="Υ:", }, coords[i] }; expand="YES", } -- меняем заголовк вкладки vboxes[i].tabtitle = "Πρόγραμμα" .. i -- создаем чекбокс, который будет указывать на то, нужно ли строить -- график по данным из указанной вкладки checkboxes[i] = iup.toggle{ title= "Πρόγραμμα" .. i, value = "ΕΠΙ" } end -- теперь из заполненных нами контейнеров создаем вкладки tabs = iup.tabs{unpack(vboxes)} -- создаем текстовые виджеты для редактирования подписей осей global_legend = iup.text{} global_legend = iup.text{} -- создаем фрейм для !} Γενικές Ρυθμίσειςπλαίσιο γραφικών = iup.frame ( iup.vbox ( iup.label( title="(!LANG:Χρήση δεδομένων:", expand="HORIZONTAL" }, iup.vbox { unpack(checkboxes) }, iup.label{}, -- пустую подпись можно использовать как распорку iup.label{title = "Υπογραφές"}, iup.hbox { iup.label{ title = "Άξονας Χ"}, global_legend }, iup.hbox { iup.label{ title = "Άξονας Υ"}, global_legend }, iup.label{}, plot_btn }; expand = "VERTICAL", } -- создаем главное окно программы и наносим на него настройки и табы dg = iup.dialog { iup.hbox { frame, tabs }, title="Κατασκευή γραφήματος", size = "HALF" } -- показываем главное окно и запускаем обработку событий dg:showxy(iup.CENTER, iup.CENTER) if (iup.MainLoopLevel()==0) then iup.MainLoop() end !}

Λίγα λόγια για την ανάπτυξη
Το σενάριο μπορεί να εκτελεστεί με την εντολή:

Luaplotter.exe

Σε αυτήν την περίπτωση, οι βιβλιοθήκες θα συμπεριληφθούν από τον υποκατάλογο clibs/, ο οποίος βρίσκεται στον κατάλογο όπου εγκαταστάθηκε το Lua. για Windows. Για να συσκευάσετε το σενάριο και τις βιβλιοθήκες όσο το δυνατόν πιο συμπαγή για μεταφορά σε άλλο μηχάνημα, απλώς αντιγράψτε τα ακόλουθα αρχεία σε έναν φάκελο (που υποδεικνύεται με σχετικές διαδρομές από τον κατάλογο εγκατάστασης Lua):

Lua.exe lib/lua5.1.dll clibs/cd.dll clibs/cdlua51.dll clibs/iup.dll clibs/iup_pplot.dll clibs/iupcd.dll clibs/iupcontrols.dll clibs/iupgl.dll clibs.up. clibs/iuplua_pplot51.dll clibs/iupluacontrols51.dll clibs/iupluacontrols51.dll clibs/freetype6.dll

Μην ξεχάσετε να τοποθετήσετε το σενάριο με το πρόγραμμα σε αυτόν τον φάκελο. Τώρα μπορείτε να μεταφέρετε αυτόν τον φάκελο σε άλλο μηχάνημα και να εκτελέσετε τα προγράμματά σας με την παραπάνω εντολή. Σε αυτήν την περίπτωση, δεν χρειάζονται άλλα βήματα για την εγκατάσταση βιβλιοθηκών και χρόνου εκτέλεσης.

Δυστυχώς, τα αρχεία cd.dll, cdluad51.dll και iupcd.dll ενδέχεται να μην λειτουργούν σωστά σε αυτήν την έκδοση του Lua για Windows, επομένως συνιστώ να τα αφαιρέσετε από το αρχείο χρησιμοποιώντας τον παρακάτω σύνδεσμο.

Αποτελέσματα
Αρχειοθέτηση με την λειτουργική έκδοση, η εφαρμογή εκκίνησης app.bat προστέθηκε για ευκολία.

Στιγμιότυπα οθόνης:

Ως αποτέλεσμα, πήραμε, αν και ένα αδέξιο, βοηθητικό πρόγραμμα που έχει την ίδια λειτουργικότητα σαν να ήταν γραμμένο σε μια "σοβαρή" γλώσσα προγραμματισμού. Ταυτόχρονα, είναι εύκολο να αναπτυχθεί και με συνολικό βάρος μικρότερο από 2 mb. Κατανάλωση μνήμης - περίπου 7 MB. Ο πηγαίος κώδικας είναι επεξεργάσιμος, ο ίδιος ο Lua είναι διαδραστικά κατανοητός, γεγονός που απλοποιεί την ανάπτυξη τέτοιου λογισμικού στο πεδίο.

Κατά τη γνώμη μου, αυτή είναι μια εξαιρετική επιλογή για τη σύνταξη εκπαιδευτικού λογισμικού για σχολεία και ινστιτούτα, καθώς και για εσωτερική χρήση σε επιχειρήσεις. Δεδομένου ότι τα αδύναμα μηχανήματα εξακολουθούν να αφθονούν σε παρόμοια μέρη σε ολόκληρη την ΚΑΚ, η χρήση του Lua με αυτόν τον τρόπο έχει νόημα, ειδικά υπό το φως της σταδιακής άφιξης του Linux σε επιτραπέζιους υπολογιστές. Επιπλέον, η τάση να χάνονται οι πηγαίοι κώδικες του αυτογραφικού λογισμικού με το τρομερό buggy του μπορεί να εξισωθεί με μια εθνική καταστροφή.

Ετικέτες: Προσθήκη ετικετών

Πρόσθετο LUA - απαιτείται για ορισμένα mods που είναι γραμμένα άγκιστρο σεναρίου V για το GTA 5.

Η Lua είναι μια γλώσσα προγραμματισμού σεναρίου που αναπτύχθηκε από το τμήμα Tecgraf (Computer Graphics Technology Group) του Καθολικού Πανεπιστημίου του Ρίο ντε Τζανέιρο (Βραζιλία). Ο διερμηνέας γλώσσας διανέμεται ελεύθερα, ανοιχτού κώδικα στη γλώσσα C.

Όσον αφορά τα χαρακτηριστικά, την ιδεολογία και την εφαρμογή, η γλώσσα είναι πιο κοντά στη JavaScript, αλλά η Lua έχει πιο ισχυρές και πολύ πιο ευέλικτες κατασκευές. Αν και το Lua δεν περιέχει ρητά τις έννοιες της κλάσης και του αντικειμένου, οι αντικειμενοστρεφείς μηχανισμοί προγραμματισμού, συμπεριλαμβανομένης της πολλαπλής κληρονομικότητας, υλοποιούνται εύκολα χρησιμοποιώντας μεταπίνακες, οι οποίοι είναι επίσης υπεύθυνοι για την υπερφόρτωση του χειριστή κ.λπ. Το εφαρμοσμένο αντικειμενοστραφή μοντέλο προγραμματισμού είναι πρωτότυπο (όπως είναι σε JavaScript).

Πρόσθετο LUA για Script Hook V

Η γλώσσα χρησιμοποιείται ευρέως για τη δημιουργία ενός αναπαραγόμενου λογισμικό(για παράδειγμα, λέει GUIπακέτο Adobe Lightroom). Επίσης απέκτησε δημοτικότητα ως γλώσσα προγραμματισμού για επίπεδα και επεκτάσεις σε πολλά παιχνίδια (συμπεριλαμβανομένου του World of Warcraft) λόγω της ευκολίας ενσωμάτωσης, της ταχύτητας εκτέλεσης κώδικα και της ευκολίας εκμάθησης.

Πώς να εγκαταστήσω

  1. Χρειάζεστε ένα εγκατεστημένο
  2. Στη συνέχεια, απλώς αντιγράψτε όλα τα αρχεία από το αρχείο (συμπεριλαμβανομένων των φακέλων) στο ριζικό φάκελο gta 5.
  3. Στο μέλλον, τα σενάρια στο LUA φορτώνονται στο φάκελο "/scripts/addins"

Η Lua για Windows (LfW) είναι μια διερμηνευμένη γλώσσα προγραμματισμού που αναπτύχθηκε από το τμήμα Tecgraf της Ομάδας Τεχνολογίας Γραφικών Υπολογιστών του Ποντιφικού Καθολικού Πανεπιστημίου του Ρίο ντε Τζανέιρο στη Βραζιλία. Ο ανεπτυγμένος διερμηνέας διανέμεται ελεύθερα, με κείμενα ανοιχτού κώδικα στη γλώσσα C.

Όσον αφορά τα χαρακτηριστικά, την ιδεολογία και την εφαρμογή, η γλώσσα είναι πιο κοντά στη JavaScript, αλλά η Lua έχει πιο ισχυρές και πολύ πιο ευέλικτες κατασκευές. Αν και το Lua δεν περιέχει ρητά τις έννοιες της κλάσης και του αντικειμένου, οι αντικειμενοστρεφείς μηχανισμοί προγραμματισμού, συμπεριλαμβανομένης της πολλαπλής κληρονομικότητας, υλοποιούνται εύκολα χρησιμοποιώντας μεταπίνακες, οι οποίοι είναι επίσης υπεύθυνοι για την υπερφόρτωση του χειριστή κ.λπ. Το εφαρμοσμένο αντικειμενοστραφή μοντέλο προγραμματισμού είναι πρωτότυπο (όπως και σε JavaScript).

Η γλώσσα χρησιμοποιείται ευρέως για τη δημιουργία αναπαραγόμενου λογισμικού - συγκεκριμένα, η γραφική διεπαφή του πακέτου είναι γραμμένη σε αυτήν. Adobe Photoshop Lightroom. Έχει επίσης κερδίσει εξέχουσα θέση ως γλώσσα προγραμματισμού για επίπεδα και επεκτάσεις σε πολλά παιχνίδια (όπως το World of Warcraft) λόγω της ευκολίας ενσωμάτωσης, της ταχύτητας εκτέλεσης κώδικα και της ευκολίας εκμάθησης.

Η Lua αναφέρεται συνήθως ως γλώσσα πολλαπλών παραδειγμάτων. Παρέχει ένα μικρό σύνολο βασικών μηχανισμών που μπορούν να επεκταθούν για την επίλυση διαφορετικών προβλημάτων, αντί για ένα σύνολο πολύπλοκων άκαμπτων προδιαγραφών που διασφαλίζουν τον προγραμματισμό σε ένα μόνο παράδειγμα.

Για παράδειγμα, δεν υπάρχει ρητή υποστήριξη για κληρονομικότητα στο Lua, αλλά υλοποιείται εύκολα χρησιμοποιώντας μεταπίνακες.

- Η επέκταση (μορφή) είναι οι χαρακτήρες στο τέλος του αρχείου μετά την τελευταία τελεία.
- Ο υπολογιστής καθορίζει τον τύπο αρχείου με ακρίβεια.
- Με Προεπιλογή των Windowsδεν εμφανίζει επεκτάσεις ονόματος αρχείου.
- Ορισμένοι χαρακτήρες δεν μπορούν να χρησιμοποιηθούν στο όνομα και την επέκταση του αρχείου.
- Δεν σχετίζονται όλες οι μορφές με το ίδιο πρόγραμμα.
- Παρακάτω είναι όλα τα προγράμματα με τα οποία μπορείτε να ανοίξετε το αρχείο LUA.

Πολλοί χρήστες MS Windows έχουν από καιρό παρατηρήσει ότι ένα τυπικό σημειωματάριο είναι ένα μάλλον άβολο πρόγραμμα στη χρήση. Αυτό μπορεί να είναι αντικατάσταση δωρεάν συντάκτης αρχεία κειμένου, το οποίο παρέχει συντακτική υποστήριξη για μεγάλο αριθμό γλωσσών προγραμματισμού. Το πρόγραμμα περιέχει ένα αρκετά ευρύ φάσμα επιλογών και χαρακτηρίζεται από ελάχιστη κατανάλωση πόρων επεξεργαστή. Το πρόγραμμα καθιστά δυνατή την ταυτόχρονη προβολή πολλών εγγράφων ταυτόχρονα και την επεξεργασία τους χωρίς να κλείνουν περιττά παράθυρα. Έχει γίνει επίσης διαθέσιμη μια επιλογή, όπως η επεξεργασία του ίδιου εγγράφου διαφορετικούς τόπουςπου είναι πολύ βολικό...

Το Notepad2 είναι μια απλή εφαρμογή που σας επιτρέπει να πληκτρολογείτε και να επεξεργάζεστε κείμενο. Θα βοηθήσει στη δημιουργία σελίδων HTML, στον προγραμματισμό σε διάφορες γλώσσες (CSS, Java, JavaScript, Python, SQL, Perl, PHP) καθώς είναι σε θέση να τονίσει τον κώδικα. Το πρόγραμμα βασίζεται στην αρχή ενός απλού σημειωματάριου, είναι ελαφρύ και συμπαγές. Αυτό το πρόγραμμα επεξεργασίας κειμένου ελέγχει όλες τις αγκύλες για ζεύγη, υποστηρίζει την αυτόματη εσοχή. Το Notepad2 όχι μόνο υποστηρίζει κωδικοποιήσεις ASCII και UTF-8, αλλά ξέρει επίσης πώς να τις μετατρέψει. Σας επιτρέπει να επαναφέρετε τις ανεπιθύμητες λειτουργίες πολλά επίπεδα πίσω. Υποστηρίζει την επιλογή μπλοκ στοιχείων κειμένου και έχει αριθμημένες γραμμές...

Το Komodo Edit είναι ένας εύχρηστος επεξεργαστής κώδικα που υποστηρίζει ένα ευρύ φάσμα διαφορετικών γλωσσών προγραμματισμού. Το πρόγραμμα δίνει στους χρήστες την ευκαιρία να εργαστούν με πολλά αρχεία ταυτόχρονα, η σύνταξη κώδικα θα γίνει πιο αποτελεσματική χρησιμοποιώντας τη λειτουργία αυτόματης συμπλήρωσης, συμβουλές. Η εφαρμογή σάς επιτρέπει να επισημαίνετε αυτόματα μεταβλητές όταν επιλέγονται. Χρησιμοποιώντας το πρόγραμμα επεξεργασίας, μπορείτε να προβάλετε αρχεία σε άλλες γλώσσες προγραμματισμού. Το πρόγραμμα υποστηρίζει χρωματισμό σύνταξης, εσοχή. Μπορεί να ελέγξει τις παραμέτρους σύνταξης, τα αποσπάσματα που χρησιμοποιούνται για την αποθήκευση του κώδικα στήλης πηγής. Διαθέτει εύκολη λειτουργία επεξεργασίας και υποστηρίζει μεταφορά και απόθεση στοιχείων...

Υπάρχουν πολλά προγράμματα στο Διαδίκτυο που σας επιτρέπουν να επεξεργαστείτε πηγήάλλο πρόγραμμα, αρχείο κ.λπ. Ωστόσο, τα περισσότερα από αυτά τα προγράμματα είναι απλά επεξεργαστής κειμένουσαν σημειωματάριο. Διαφέρουν από τον παραπάνω επεξεργαστή μόνο στο ότι έχουν επισήμανση σύνταξης. Ωστόσο, σε ορισμένες περιπτώσεις, αυτή η λειτουργικότητα του προγράμματος δεν είναι αρκετή. Ένας προγραμματιστής μπορεί να χρειαστεί να βρει γρήγορα διαφορετικά μέρη ενός εγγράφου. Και τώρα, επιτέλους, εμφανίστηκε ένα πρόγραμμα που σας επιτρέπει να λύσετε αυτό το πρόβλημα. Το πρόγραμμα ονομάζεται SynWrite. Αυτήν διακριτικό γνώρισμα– η παρουσία μιας γραμμής πλοήγησης με ένα δέντρο που ...

Σενάρια Lua

Ένα σενάριο γραμμένο σε Lua δεν έχει κάποια ειδική λειτουργία από την οποία θα ξεκινούσε η εκτέλεσή του. Ένα σενάριο μπορεί να θεωρηθεί απλώς ως ένα σύνολο εντολών (εντολών) που εκτελείται ξεκινώντας από την πρώτη εντολή.

Το σενάριο μπορεί να είναι είτε πολύ απλό, αποτελούμενο από μία μόνο εντολή, είτε πολύ περίπλοκο, που περιέχει δεκάδες, εκατοντάδες ή και χιλιάδες οδηγίες. Οι ακόλουθες οδηγίες μπορούν να διαχωριστούν με ένα ερωτηματικό (;). Ωστόσο, αυτή η απαίτηση δεν είναι υποχρεωτική, επομένως όλος ο παρακάτω κώδικας είναι σωστός όσον αφορά τη σύνταξη:

Εργασία με μεταβλητές στο Lua

Οι μεταβλητές χρησιμοποιούνται για την αποθήκευση τιμών κατά την εκτέλεση του σεναρίου.

Ονόματα μεταβλητών στο Lua

Τα ονόματα μεταβλητών (αναγνωριστικά) στο Lua μπορεί να είναι οποιαδήποτε ακολουθία γραμμάτων, αριθμών και υπογράμμισης που δεν ξεκινούν με αριθμό.

Σημείωση

Η γλώσσα Lua κάνει διάκριση πεζών-κεφαλαίων, επομένως τα abc, Abc, ABC είναι διαφορετικά ονόματα.

Ο παρακάτω πίνακας παραθέτει λέξεις που είναι δεσμευμένες από τη γλώσσα Lua και δεν μπορούν να χρησιμοποιηθούν σε ονόματα μεταβλητών:

και διάλειμμα do otherif

τέλος false για συνάρτηση αν

σε τοπικό μηδέν ή

επανάληψη επιστροφής και μετά true μέχρι

Επιπλέον, όλα τα ονόματα που ξεκινούν με μια υπογράμμιση ακολουθούμενη από κεφαλαία γράμματα(π.χ. _VERSION) είναι επίσης δεσμευμένα.

Ποιες είναι οι μεταβλητές στο Lua;

Οι μεταβλητές στο Lua μπορεί να είναι είτε καθολικές είτε τοπικές. Εάν μια μεταβλητή δεν δηλώνεται ρητά τοπική, θεωρείται καθολική.

Lua Global Variables

Μια καθολική μεταβλητή εμφανίζεται τη στιγμή που της εκχωρείται η πρώτη της τιμή. Πριν εκχωρήσετε την πρώτη τιμή, η πρόσβαση σε μια καθολική μεταβλητή αποδίδει μηδέν.

MsgBox(tostring(g)) --> μηδέν

MsgBox(tostring(g)) --> 1

Η καθολική μεταβλητή υπάρχει όσο υπάρχει το περιβάλλον εκτέλεσης σεναρίου και είναι διαθέσιμη σε οποιονδήποτε κώδικα Lua που εκτελεί σε αυτό το περιβάλλον.

Εάν είναι απαραίτητο, μπορείτε να διαγράψετε ρητά μια καθολική μεταβλητή ορίζοντας την απλώς στο μηδέν.

g = 1 - δημιουργήστε μια καθολική μεταβλητή g με τιμή 1

g = μηδέν - αφαιρέστε την καθολική μεταβλητή g

MsgBox(tostring(g)) --> μηδέν

Όλες οι καθολικές μεταβλητές είναι πεδία σε έναν κανονικό πίνακα που ονομάζεται καθολικό περιβάλλον. Αυτός ο πίνακας είναι διαθέσιμος μέσω της καθολικής μεταβλητής _G. Εφόσον τα πεδία του καθολικού περιβάλλοντος είναι όλες καθολικές μεταβλητές (συμπεριλαμβανομένου του ίδιου του _G), τότε _G._G == _G.

Τοπικές μεταβλητές Lua

Οποιεσδήποτε τοπικές μεταβλητές πρέπει να δηλώνονται ρητά χρησιμοποιώντας την τοπική λέξη-κλειδί. Μπορείτε να δηλώσετε μια τοπική μεταβλητή οπουδήποτε στο σενάριο. Η δήλωση μπορεί να περιλαμβάνει την εκχώρηση αρχικής τιμής στη μεταβλητή. Εάν δεν εκχωρηθεί τιμή, η μεταβλητή περιέχει μηδέν.

τοπική α - δήλωση τοπικής μεταβλητής α

local b = 1 - δηλώστε την τοπική μεταβλητή b, εκχωρήστε την τιμή 1 σε αυτήν

local c, d = 2, 3 - δηλώστε τις τοπικές μεταβλητές c και d, αντιστοιχίστε τους τις τιμές 2 και 3

Το εύρος μιας τοπικής μεταβλητής ξεκινά μετά τη δήλωση και συνεχίζεται μέχρι το τέλος του μπλοκ.

Σημείωση

Το εύρος μιας μεταβλητής είναι ένα τμήμα του κώδικα προγράμματος εντός του οποίου μπορείτε να αποκτήσετε πρόσβαση στην τιμή που είναι αποθηκευμένη σε αυτήν τη μεταβλητή.

Μπλοκ σημαίνει:

σώμα δομής ελέγχου (αν-τότε, αλλιώς, για, ενώ, επανάληψη).

Σώμα λειτουργίας?

ένα κομμάτι κώδικα που περικλείεται στις λέξεις-κλειδιά do...end.

Εάν μια τοπική μεταβλητή ορίζεται εκτός οποιουδήποτε μπλοκ, το εύρος της εκτείνεται μέχρι το τέλος του σεναρίου.

local i = 1 - η μεταβλητή i είναι τοπική μέσα στο σενάριο

καθώς εγώ<= a do - цикл от 1 до 5

local a = i^2 - η μεταβλητή a είναι τοπική εντός του βρόχου while

MsgBox(a) --> 1, 4, 9, 16, 25

MsgBox(a) -->

αν i > 5 τότε

local a - η μεταβλητή a είναι τοπική μέσα τότε

MsgBox(a) --> 10

MsgBox(a) --> 5 (αναφέρεται στο καθολικό a εδώ)

local a = 20 - η μεταβλητή a είναι τοπική μέσα στο do-end

MsgBox(a) --> 20

MsgBox(a) --> 5 (αναφέρεται στο καθολικό a εδώ)

Σημείωση

Όποτε είναι δυνατόν, συνιστάται η χρήση τοπικών μεταβλητών αντί για καθολικές. Αυτό θα αποφύγει τη μόλυνση του παγκόσμιου χώρου ονομάτων και θα παρέχει καλύτερη απόδοση (επειδή η πρόσβαση σε τοπικές μεταβλητές στο Lua είναι ελαφρώς πιο γρήγορη από την πρόσβαση σε καθολικές).

Τύποι δεδομένων Lua

Ποιους τύπους δεδομένων υποστηρίζει η γλώσσα Lua;

Το Lua υποστηρίζει τους ακόλουθους τύπους δεδομένων:

1. Μηδενικό (τίποτα). Αντιστοιχεί στην απουσία του μεταβλητή τιμής. Αυτός ο τύπος αντιπροσωπεύεται από μια ενιαία τιμή, μηδέν.

2. Boolean (λογικό). Προς το αυτός ο τύποςΟι τιμές περιλαμβάνουν false (false) και true (true).

Κατά την εκτέλεση λογικών πράξεων, η τιμή μηδέν αντιμετωπίζεται ως ψευδής. Όλες οι άλλες τιμές, συμπεριλαμβανομένου του αριθμού 0 και της κενή συμβολοσειράς, αντιμετωπίζονται ως αληθείς.

3. Αριθμός (αριθμητικός). Χρησιμοποιείται για την αναπαράσταση αριθμητικών τιμών.

Οι αριθμητικές σταθερές μπορεί να είναι προαιρετικές κλασματικό μέροςκαι έναν προαιρετικό δεκαδικό εκθέτη που καθορίζεται από τους χαρακτήρες "e" ή "E". Οι ακέραιες αριθμητικές σταθερές μπορούν να καθοριστούν σε δεκαεξαδικό χρησιμοποιώντας το πρόθεμα 0x.

Παραδείγματα έγκυρων αριθμητικών σταθερών: 3, 3.0, 3.1415926, 314.16e-2, 0xff.

4. Χορδή (χορδή). Χρησιμοποιείται για την αναπαράσταση χορδών.

Οι τιμές συμβολοσειράς καθορίζονται ως μια ακολουθία χαρακτήρων που περικλείονται σε μονά ή διπλά εισαγωγικά:

a = "αυτή είναι μια συμβολοσειρά"

b = "αυτή είναι η δεύτερη γραμμή"

Οι συμβολοσειρές που περικλείονται σε διπλά εισαγωγικά μπορούν να ερμηνεύσουν ακολουθίες διαφυγής τύπου C που ξεκινούν με χαρακτήρα "\" (πίσω κάθετο):

\b (κενό),

\n (ροή γραμμής),

\r (επιστροφή μεταφοράς);

\t (οριζόντια καρτέλα),

\\ (πίσω κάθετο);

\"" (διπλό απόσπασμα);

\" (μονό απόσπασμα).

Σημείωση

Ένας χαρακτήρας σε μια συμβολοσειρά μπορεί επίσης να αναπαρασταθεί από τον κώδικά του χρησιμοποιώντας την ακολουθία διαφυγής:

όπου ddd είναι μια ακολουθία που δεν υπερβαίνει τα τρία ψηφία.

Εκτός από τα εισαγωγικά, μπορούν επίσης να χρησιμοποιηθούν διπλές αγκύλες για τον ορισμό μιας συμβολοσειράς:

Ο ορισμός μιας συμβολοσειράς με διπλές αγκύλες σάς επιτρέπει να αγνοήσετε όλες τις ακολουθίες διαφυγής, δηλαδή η συμβολοσειρά δημιουργείται εντελώς όπως περιγράφεται:

τοπική α = [] σε Λούα]=]

Θα υπάρχει ένας όρος: "ορισμός συμβολοσειράς[] στο Lua"

5. Λειτουργία (συνάρτηση). Οι συναρτήσεις στο Lua μπορούν να γραφτούν σε μεταβλητές, να περάσουν ως παράμετροι σε άλλες συναρτήσεις και να επιστραφούν ως αποτέλεσμα της εκτέλεσης συναρτήσεων.

6. Τραπέζι (πίνακας). Ένας πίνακας είναι ένα σύνολο ζευγών "κλειδιών" - "τιμής", τα οποία ονομάζονται πεδία ή στοιχεία ενός πίνακα. Τόσο τα κλειδιά όσο και οι τιμές των πεδίων πίνακα μπορούν να είναι οποιουδήποτε τύπου εκτός από το μηδέν. Οι πίνακες δεν έχουν σταθερό μέγεθος: ανά πάσα στιγμή, μπορείτε να προσθέσετε έναν αυθαίρετο αριθμό στοιχείων σε αυτούς.

Διαβάστε περισσότερα στο άρθρο "Δημιουργία πινάκων στο Lua"

7. Δεδομένα χρήστη (στοιχεία χρήστη). Είναι ειδικός τύπος δεδομένων. Οι τιμές αυτού του τύπου δεν μπορούν να δημιουργηθούν ή να τροποποιηθούν απευθείας σε ένα σενάριο Lua.

Τα δεδομένα χρήστη χρησιμοποιούνται για την αναπαράσταση νέων τύπων που δημιουργούνται στον καλούντα του σεναρίου ή σε βιβλιοθήκες γραμμένες σε C. Για παράδειγμα, οι βιβλιοθήκες επέκτασης Lua για το "CronosPRO" χρησιμοποιούν αυτόν τον τύπο για να αναπαραστήσουν αντικείμενα όπως:

τράπεζες δεδομένων (κατηγορία τράπεζας).

βάσεις δεδομένων (class Base);

εγγραφές (Record τάξης) κ.λπ.

8. Κλωστή (κλωστή). Αντιστοιχεί στη ροή της εκτέλεσης. Αυτά τα ρεύματα δεν συνδέονται σε καμία περίπτωση με λειτουργικό σύστημακαι υποστηρίζονται αποκλειστικά μέσω της ίδιας της Lua.

Πώς να ορίσετε τον τύπο μιας μεταβλητής στο Lua;

Ο Lua δεν προσδιορίζει ρητά τον τύπο μιας μεταβλητής. Ο τύπος μιας μεταβλητής ορίζεται τη στιγμή που εκχωρείται μια τιμή στη μεταβλητή. Σε οποιαδήποτε μεταβλητή μπορεί να εκχωρηθεί μια τιμή οποιουδήποτε τύπου (ανεξάρτητα από τον τύπο που περιείχε προηγουμένως).

a = 123 - η μεταβλητή a έχει αριθμό τύπου

a = "123" - τώρα η μεταβλητή a είναι τύπου string

a = true - η μεταβλητή a είναι πλέον τύπου boolean

a = () - τώρα η μεταβλητή a είναι τύπου πίνακα

Σημείωση

Οι μεταβλητές τύπου πίνακα, συνάρτησης, νήματος και δεδομένων χρήστη δεν περιέχουν τα ίδια τα δεδομένα, αλλά αποθηκεύουν αναφορές στα αντίστοιχα αντικείμενα. Κατά την εκχώρηση, τη μετάβαση σε μια συνάρτηση ως όρισμα και την επιστροφή από μια συνάρτηση ως αποτέλεσμα, τα αντικείμενα δεν αντιγράφονται, αντιγράφονται μόνο αναφορές σε αυτά.

a = () - δημιουργήστε έναν πίνακα. Μια αναφορά στον πίνακα τοποθετείται στη μεταβλητή a

b = a - η μεταβλητή b αναφέρεται στον ίδιο πίνακα με το a

a = 10 - στο στοιχείο πίνακα με δείκτη 1 εκχωρείται η τιμή 10

MsgBox(b) --> "10"

MsgBox(a) --> "20"

Τα υπόλοιπα δεδομένα είναι άμεσες τιμές.

MsgBox(a) --> "20"

MsgBox(b) --> "10"

Πώς να βρείτε τον τύπο μιας μεταβλητής στο Lua;

Ο τύπος μιας τιμής που είναι αποθηκευμένη σε μια μεταβλητή μπορεί να βρεθεί χρησιμοποιώντας τον τυπικό τύπο συνάρτησης. Αυτή η συνάρτηση επιστρέφει μια συμβολοσειρά που περιέχει το όνομα του τύπου ("nil", "number", "string", "boolean", "table", "function", "thread", "userdata").

t = type("αυτό είναι μια συμβολοσειρά") - το t είναι ίσο με "string"

t = τύπος(123) - t είναι "αριθμός"

t = τύπος (τύπος) - t ισούται με "συνάρτηση"

t = τύπος (true) - t είναι "boolean"

t = τύπος (μηδέν) - t είναι "μηδέν"

t = τύπος(CroApp.GetBank()) - t ισούται με "δεδομένα χρήστη"

Πώς να μετατρέψετε τον τύπο μιας μεταβλητής στο Lua;

Ο Lua μετατρέπει αυτόματα τους αριθμούς σε συμβολοσειρές και το αντίστροφο, εάν είναι απαραίτητο. Για παράδειγμα, εάν μια τιμή συμβολοσειράς είναι τελεστής σε μια αριθμητική πράξη, μετατρέπεται σε αριθμό. Ομοίως, μια αριθμητική τιμή που συναντάται όπου αναμένεται μια συμβολοσειρά θα μετατραπεί σε συμβολοσειρά.

a = "10" + 2 - το a είναι ίσο με 12

a = "10" + 2 - a ισούται με "10 + 2"

a = "-5.3e-10"*"2" - a ισούται με -1,06e-09

a = "string" + 2 - Σφάλμα! Δεν είναι δυνατή η μετατροπή του "string" σε αριθμό

Μια τιμή οποιουδήποτε τύπου μπορεί να μετατραπεί ρητά σε συμβολοσειρά χρησιμοποιώντας την τυπική συνάρτηση tostring.

a = tostring(10) - a είναι "10"

a = tostring(true) - a ισούται με "true"

a = tostring(nil) - το a ισούται με "nil"

a = tostring (( = "αυτό είναι το πεδίο 1")) - a ισούται με "πίνακας: 06DB1058"

Από το προηγούμενο παράδειγμα, μπορείτε να δείτε ότι τα περιεχόμενα των πινάκων δεν μετατρέπονται από τη συνάρτηση tostring. Αυτός ο μετασχηματισμός μπορεί να γίνει χρησιμοποιώντας τη συνάρτηση render.

a = render(10) - a είναι "10"

a = render(true) - a ισούται με "true"

a = render(nil) - a είναι "nil"

a = render (( = "αυτό είναι το πεδίο 1")) - a είναι "( = "αυτό είναι το πεδίο 1")"

Για να μετατρέψετε ρητά μια τιμή σε αριθμό, μπορείτε να χρησιμοποιήσετε τη συνάρτηση τυπικού αριθμού αριθμών. Εάν η τιμή είναι μια συμβολοσειρά που μπορεί να μετατραπεί σε αριθμό (ή είναι ήδη αριθμός), η συνάρτηση επιστρέφει το αποτέλεσμα της μετατροπής, διαφορετικά επιστρέφει μηδέν.

a = tonumber("10") - a ισούται με "10"

a = tonumber("10"..5") - το a είναι ίσο με 10,5

a = tonumber(true) - a ισούται με "μηδέν"

a = τόνος (μηδέν) - το a είναι ίσο με "μηδέν"

Τακτοποίηση σχολίων σε Lua

Ένα σχόλιο στο Lua ξεκινά με δύο σημάδια μείον (--) και συνεχίζει μέχρι το τέλος της γραμμής.

τοπικό a = 1 - σχόλιο μονής γραμμής

Εάν δύο αρχικές αγκύλες ([[) ακολουθούν αμέσως τους χαρακτήρες "--", το σχόλιο είναι σχόλιο πολλών γραμμών και συνεχίζει σε δύο αγκύλες κλεισίματος (]].

τοπικό a = 1 - [[ πολύγραμμη

ένα σχόλιο ]]

Οι διπλές αγκύλες στα σχόλια μπορούν να είναι ένθετες. Για να μην τα μπερδέψουμε, παρεμβάλλεται ένα σύμβολο ίσου (=) ανάμεσα στις αγκύλες:

τοπική α = [[Εταιρεία Kronos]] - [=[

τοπική α = [[Εταιρεία Kronos]]

Ο αριθμός των χαρακτήρων "=" καθορίζει την ένθεση:

local a = [=[ορισμός κάποιας συμβολοσειράς [] σε Lua]=] --[==[

local a = [=[ορισμός κάποιας συμβολοσειράς [] στο Lua]=]

Λειτουργίες που χρησιμοποιούνται στο Lua

Σε εκφράσεις γραμμένες σε Lua, μπορούν να χρησιμοποιηθούν τα ακόλουθα είδη πράξεων:

1. Αριθμητικές πράξεις.

Ο Λούα υποστηρίζει τα εξής αριθμητικές πράξεις:

+ (προσθήκη);

- (αφαίρεση);

* (πολλαπλασιασμός);

/ (διαίρεση);

^ (εκθετική)

% (υπόλοιπο της διαίρεσης).

Σημείωση

Οι αριθμητικές πράξεις ισχύουν τόσο για αριθμούς όσο και για συμβολοσειρές, οι οποίοι σε αυτήν την περίπτωση μετατρέπονται σε αριθμούς.

2. Πράξεις σύγκρισης.

Οι ακόλουθες πράξεις σύγκρισης τιμών επιτρέπονται στο Lua:

== (ίσο με);

~= (όχι ίσο);

< (меньше);

> (μεγαλύτερο);

<= (меньше или равно);

>= (μεγαλύτερο ή ίσο με).

Σημείωση

Οι λειτουργίες σύγκρισης πάντα επιστρέφουν booleanσωστό ή λάθος.

Οι κανόνες για τη μετατροπή αριθμών σε συμβολοσειρές (και αντίστροφα) δεν λειτουργούν κατά τις συγκρίσεις, δηλαδή η έκφραση "0" == 0 καταλήγει σε ψευδή.

3. Λογικές πράξεις.

Προς το λογικές πράξειςσχετίζομαι:

και (λογικό ΚΑΙ).

Ο τελεστής και επιστρέφει τον πρώτο του τελεστή εάν αξιολογηθεί ως ψευδής ή μηδενικός. Διαφορετικά, η πράξη επιστρέφει τον δεύτερο τελεστή (και αυτός ο τελεστής μπορεί να είναι οποιουδήποτε τύπου).

a = (μηδέν και 5) - το a είναι ίσο με μηδέν

a == (ψευδές και 5) - το α είναι ψευδές

a == (4 και 5) - το a είναι ίσο με 5

ή (λογικό Ή).

Ο τελεστής ή επιστρέφει τον πρώτο τελεστή εάν δεν είναι ούτε ψευδής ούτε μηδενικός, διαφορετικά επιστρέφει τον δεύτερο τελεστή.

a == (4 ή 5) - το a είναι ίσο με 4

a == (ψευδή ή 5) - το a είναι ίσο με 5

Σημείωση

σπαζοκεφαλιά λειτουργίες καικαι ή μπορεί να επιστρέψει τιμές οποιουδήποτε τύπου.

Οι λογικές πράξεις και/ή αξιολογούν την τιμή του δεύτερου τελεστή μόνο εάν χρειάζεται να επιστραφεί. Εάν δεν απαιτείται, ο δεύτερος τελεστής δεν αξιολογείται. Για παράδειγμα:

a == (4 ή f()) - η συνάρτηση f() δεν θα κληθεί

όχι (λογικό ΟΧΙ).

Ο τελεστής not επιστρέφει πάντα true ή false.

4. Λειτουργία συνένωσης.

Για να συνδέσετε (συνδυάσετε) χορδές, χρησιμοποιήστε την πράξη ... (δύο τελείες).

a = "Kronos".."-".."Inform" - η μεταβλητή a θα πάρει την τιμή "Kronos-Inform"

Σημείωση

Εάν ένας ή και οι δύο τελεστές είναι αριθμοί, μετατρέπονται σε συμβολοσειρές.

a = 0..1 - η μεταβλητή a θα πάρει την τιμή "01"

5. Η λειτουργία λήψης του μήκους.

Ο Lua ορίζει τον τελεστή μήκους #, ο οποίος μπορεί να χρησιμοποιηθεί για να πάρει το μήκος μιας συμβολοσειράς.

a = "χορδή"

len = #a - το len είναι ίσο με 6

len = #"μια ακόμη γραμμή" - το len είναι 10

Σημείωση

Μπορείτε επίσης να χρησιμοποιήσετε τον τελεστή # για να μάθετε το μέγιστο δείκτη (ή μέγεθος) ενός πίνακα. Για περισσότερες λεπτομέρειες, ανατρέξτε στο άρθρο "Εργασία με συστοιχίες στο Lua".

Προτεραιότητα χειριστή στη Λούα

Στο Lua, οι λειτουργίες εκτελούνται σύμφωνα με την ακόλουθη προτεραιότητα (με φθίνουσα σειρά):

2. όχι # - (μοναδικό)

6. < > <= >= ~= ==

Κλήση σεναρίων από φόρμες

Κάθε φόρμα (συμπεριλαμβανομένων των ένθετων φορμών) έχει ένα ξεχωριστό σενάριο που σχετίζεται με αυτήν, το οποίο συνήθως περιέχει συναρτήσεις που χειρίζονται τα συμβάντα της φόρμας και τα στοιχεία της.

Όταν εκτελείται μια φόρμα, το σενάριό της φορτώνεται στο παγκόσμιο περιβάλλον. Όταν συμβαίνει ένα συμβάν μιας φόρμας ή ενός στοιχείου της, το σύστημα καλεί τη συνάρτηση χειριστή που σχετίζεται με αυτό το συμβάν.

Θα πρέπει να σημειωθεί ότι το σενάριο φόρμας, αν και δεν περιέχει κλήση στη συνάρτηση λειτουργικής μονάδας, είναι στην πραγματικότητα μια ενότητα. Αυτό σημαίνει ότι οι μεταβλητές που δηλώνονται στη δέσμη ενεργειών φόρμας χωρίς την τοπική λέξη-κλειδί δεν εκτίθενται στο παγκόσμιο περιβάλλον και είναι διαθέσιμες μόνο μέσα σε αυτό το σενάριο. Εάν μια τιμή πρέπει να διατεθεί σε άλλα σενάρια φόρμας, πρέπει να οριστεί ρητά στον καθολικό πίνακα _G:

τοπικός α = _Γ.βαρ

Μπλοκ δηλώσεων (οδηγίες)

Οι κύριοι φορείς εκμετάλλευσης Lua είναι:

ΑΝΑΘΕΣΗ ΕΡΓΑΣΙΑΣ;

υπό όρους χειριστή·

χειριστές για την οργάνωση κύκλων.

Μια ομάδα εντολών μπορεί να συνδυαστεί σε ένα μπλοκ (σύνθετη δήλωση) χρησιμοποιώντας την κατασκευή do...end.

do - η αρχή του μπλοκ

<оператор1>- μπλοκ σώμα

<оператор2>

<операторN>

τέλος - το τέλος του μπλοκ

Το μπλοκ ανοίγει ένα νέο πεδίο όπου μπορείτε να ορίσετε τοπικές μεταβλητές.

a = 5 - καθολική μεταβλητή a

local a = 20 - η τοπική μεταβλητή a ορίζεται μέσα στο do-end

MsgBox(a) --> 20

MsgBox(a) --> 5 (εδώ η αναφορά είναι ήδη στο καθολικό α)

Χειριστής ανάθεσης στη Λούα

Μια ανάθεση αλλάζει την τιμή μιας μεταβλητής ή ενός πεδίου πίνακα. Στην απλούστερη μορφή της, μια εργασία μπορεί να μοιάζει με αυτό:

a = 1 - στη μεταβλητή a εκχωρείται η τιμή 1

a = b + c - στη μεταβλητή a εκχωρείται το άθροισμα των τιμών των μεταβλητών b και c

a = f(x) - στη μεταβλητή a εκχωρείται η τιμή που επιστρέφεται από τη συνάρτηση f(x)

Στο Lua, επιτρέπεται η λεγόμενη πολλαπλή ανάθεση, όταν πολλές μεταβλητές στα αριστερά του τελεστή εκχώρησης λαμβάνουν τις τιμές πολλών εκφράσεων που είναι γραμμένες στα δεξιά του τελεστή εκχώρησης:

a, b = 1, 5*c - a είναι ίσο με 1. Το b είναι ίσο με 5*c

Εάν υπάρχουν περισσότερες μεταβλητές από τιμές, οι "επιπλέον" μεταβλητές εκχωρούνται μηδέν.

a, b, c = 1, 2 - a είναι ίσο με 1. Το b είναι 2; c ισούται με μηδέν

Εάν υπάρχουν περισσότερες τιμές από μεταβλητές, οι "επιπλέον" τιμές αγνοούνται.

a, b = 1, 2, 3 - το a είναι ίσο με 1. Το b είναι 2; η τιμή 3 δεν χρησιμοποιείται

Μπορεί να χρησιμοποιηθεί πολλαπλή ανάθεση για την ανταλλαγή τιμών μεταξύ μεταβλητών:

a = 10; b = 20 - το a είναι 10, το b είναι 20

a, b = b, a - τώρα το a είναι 20, το b είναι 10

Δήλωση υπό όρους (εάν) στο Lua

εάν η δήλωση ελέγχει την αλήθεια δεδομένης συνθήκης. Εάν η συνθήκη είναι αληθής, εκτελείται το τμήμα του κώδικα που ακολουθεί. λέξη-κλειδίτότε (τμήμα τότε). Διαφορετικά, εκτελείται ο κώδικας που ακολουθεί τη λέξη-κλειδί else (άλλο τμήμα).

αν a > b τότε

επιστροφή a - εάν το a είναι μεγαλύτερο από το b, επιστρέφετε a

επιστροφή β - διαφορετικά, επιστροφή β

Το άλλο τμήμα είναι προαιρετικό.

αν ένα< 0 then

a = 0 - εάν το a είναι μικρότερο από 0, ορίστε το a σε 0

Μπορείτε να χρησιμοποιήσετε την κατασκευή elseif αντί για ένθετες εντολές if. Για παράδειγμα, ο ακόλουθος κώδικας:

θα είναι ευκολότερο να το διαβάσετε αν το αντικαταστήσετε με το εξής:

επιστρέψτε "Ιβάν" - εάν το α είναι ίσο με 1

elseif a == 2 τότε

επιστρέψτε "Peter" - εάν το a είναι 2

elseif a == 3 τότε

επιστροφή "Sergey" - εάν το a είναι ίσο με 3

επιστρέψτε "Δεν υπάρχει τέτοιος παίκτης" - εάν το α δεν είναι κανένα από τα αναφερόμενα

Βρόχος με προϋπόθεση (ενώ) στο Lua

Η εντολή while έχει σχεδιαστεί για να οργανώνει κύκλους με μια προϋπόθεση και έχει την ακόλουθη μορφή:

ενώ κάνω

... - σώμα βρόχου

Πριν από κάθε επανάληψη του βρόχου, ελέγχεται η συνθήκη :

Εάν η συνθήκη είναι ψευδής, ο βρόχος τερματίζεται και ο έλεγχος μεταφέρεται στην πρώτη δήλωση μετά την εντολή while.

Εάν η συνθήκη είναι αληθής, εκτελείται το σώμα του βρόχου, μετά από το οποίο επαναλαμβάνονται όλες οι ενέργειες.

ενώ i > 0 do - βρόχος από 10 έως 1

t[i] = "πεδίο"..i

a = (3, 5, 8, -6, 5)

ενώ i > 0 do - αναζητήστε μια αρνητική τιμή στον πίνακα

αν α[i]< 0 then break end - если найдено, прерываем цикл

i = i - 1 - διαφορετικά μεταβείτε στο επόμενο στοιχείο

αν i > 0 τότε

MsgBox("Δείκτης αρνητικής τιμής: "..i)

MsgBox("Ο πίνακας δεν περιέχει αρνητικές τιμές")

Σημείωση

Βρόχος με postcondition (επανάληψη) στο Lua

Ο τελεστής επανάληψης έχει σχεδιαστεί για να οργανώνει κύκλους με μετασυνθήκη και έχει την ακόλουθη μορφή:

... - σώμα βρόχου

μέχρι

Το σώμα του βρόχου εκτελείται μέχρι τη συνθήκη δεν θα γίνει αληθινό. Η συνθήκη ελέγχεται μετά την εκτέλεση του σώματος του βρόχου, οπότε σε κάθε περίπτωση το σώμα του βρόχου θα εκτελεστεί τουλάχιστον μία φορά.

Αθροίστε τις τιμές του πίνακα a έως ότου το άθροισμα υπερβεί το 10

a = (3, 2, 5, 7, 9)

άθροισμα = άθροισμα + a[i]

μέχρι άθροισμα > 10

MsgBox("Προστέθηκαν στοιχεία ..i.." Το άθροισμα ισούται με "..άθροισμα)

Μπορείτε να χρησιμοποιήσετε τη δήλωση break για να βγείτε από έναν βρόχο πριν τελειώσει.

Σημείωση

Για περισσότερες πληροφορίες σχετικά με τις δυνατότητες χρήσης της εντολής break, ανατρέξτε στο άρθρο "Δηλώσεις διακοπής και επιστροφής"

Βρόχοι με δήλωση for στο Lua

Η δήλωση for προορίζεται για την οργάνωση βρόχων και επιτρέπει δύο μορφές γραφής:

απλό (αριθμητικό για)?

παρατεταμένη (καθολική για).

Η απλή μορφή της δήλωσης για

Η απλή μορφή της δήλωσης for είναι η εξής:

για var = exp1, exp2, exp3 do

... - σώμα βρόχου

Το σώμα του βρόχου εκτελείται για κάθε τιμή της μεταβλητής βρόχου (counter) var στην περιοχή από exp1 έως exp2, με βήμα exp3.

Σημείωση

Το βήμα ενδέχεται να μην έχει καθοριστεί. Σε αυτή την περίπτωση, λαμβάνεται ίσο με 1.

για i = 1, 10 do - βρόχος από 1 έως 10 με το βήμα 1

MsgBox("i ισούται με"..i)

για i = 10, 1, -1 do - βρόχος από 10 έως 1 με βήμα -1

MsgBox("i ισούται με"..i)

Σημείωση

Οι εκφράσεις exp1, exp2 και exp3 αξιολογούνται μόνο μία φορά, πριν από την έναρξη του βρόχου. Έτσι, στο παρακάτω παράδειγμα, η συνάρτηση f(x) θα κληθεί για να υπολογίσει το ανώτερο όριο του βρόχου μόνο μία φορά:

για i = 1, f(x) do - βρόχος από το 1 στην τιμή που επιστρέφεται από την f()

MsgBox("i ισούται με"..i)

Η μεταβλητή βρόχου είναι τοπική στη δήλωση βρόχου και δεν ορίζεται στο τέλος του βρόχου.

για i = 1, 10 do - βρόχος από 1 στην τιμή που επιστρέφεται από την f()

MsgBox("i ισούται με"..i)

MsgBox("Μετά την έξοδο από τον βρόχο, το i είναι "..i") - Λάθος! ισούμαι μηδέν

Σημείωση

Η τιμή μιας μεταβλητής βρόχου δεν μπορεί να αλλάξει μέσα στον βρόχο: οι συνέπειες μιας τέτοιας αλλαγής είναι απρόβλεπτες.

Η εντολή break χρησιμοποιείται για έξοδο από τον βρόχο πριν ολοκληρωθεί.

a = (3, 5, 8, -6, 5)

για i = 1,#a do - αναζητήστε μια αρνητική τιμή στον πίνακα

αν α[i]< 0 then - если найдено...

index = i - αποθηκεύστε το ευρετήριο της τιμής που βρέθηκε...

σπάστε - και σπάστε τον βρόχο

MsgBox("Δείκτης αρνητικής τιμής: "..ευρετήριο)

Σημείωση

Για περισσότερες πληροφορίες σχετικά με τις δυνατότητες χρήσης της δήλωσης break, ανατρέξτε στο άρθρο "Δηλώσεις διακοπής και επιστροφής")