Lua má dobre zavedenú reputáciu ako polojazyk, nástroj, ktorý môže byť príležitostne zabudovaný na skriptovanie aplikácie napísanej v kompilovanom jazyku, ako je C++. Napriek tomu je Lua úplne nezávislý jazyk, ktorý má svojho tlmočníka, schopnosť vytvárať moduly, veľké číslo knižníc a zároveň má tento PL minimálnu veľkosť medzi analógmi. Jednoducho povedané, máme všetko na to, aby sme vytvorili rovnaké aplikácie ako v perl, pythone a vo všeobecnosti v akomkoľvek inom bežnom programovacom jazyku.

Môžem vám ponúknuť nasledujúce dôvody pre Lua:

  • - aplikácie budú ľahko prenosné medzi Windows a Linux (nie skutočnosť, že kód bude fungovať bez zmien, ale prenos bude bezbolestný, ak sa nepoužijú knižnice špecifické pre platformu)
  • - malá réžia vytvorených programov
  • - vysoká rýchlosť pracovať a sťahovať aplikácie
  • - možnosť rýchlo "prilepiť" akúkoľvek C-knižnicu k Vašej aplikácii - lepšie "lepidlo" pre knižnice nenájdete
  • - pekná minimalistická syntax jazyka so schopnosťou implementovať doň moderné programovacie paradigmy
  • - Nasadenie programov Lua je veľmi jednoduché
  • - nízka spotreba pamäte

Aby som demonštroval silu Lua, ukážem vám, ako používať Lua na vytváranie malý program na vytváranie grafov podľa bodov s možnosťou uložiť graf ako súbor s obrázkom.

Ako grafickú sadu nástrojov použijeme iup – multiplatformovú knižnicu, pôvodne vytvorenú s očakávaním jej použitia od Lua.

Inštalácia Lua SDK
V rámci myšlienky použitia Lua ako nezávislého programovacieho jazyka bola vytvorená zostava Lua pre Windows, ktorá obsahuje knižnice potrebné pre každodenné úlohy, ktoré vznikajú pri programovaní pre zadaný OS: práca s databázou, GUI, syntaktický XML , atď. Nehanbite sa, že verzia Lua je v zostave 5.1 a nie 5.2 - v našom prípade medzi nimi nie je veľký rozdiel.

Stiahnite si a nainštalujte zostavu.

Stručný popis konceptu iup
Dlho som premýšľal, ako opísať proces vytvárania programu bez toho, aby som zachádzal do podrobností o zariadení iup. A rozhodol som sa stručne opísať jeho hlavné princípy:
  • - iup.dialog je koreňový prvok rozhrania programu - všetky prvky sú umiestnené v tomto kontajneri
  • - umiestnenie prvkov v kontajneri sa vykonáva pomocou rozložení: nastavenie pravidiel pre umiestnenie prvku do kontajnera. Iup sám umiestni a nakreslí prvok podľa pravidiel. Hlavné kontajnery sú rámové, vertikálne a horizontálne.
  • - obsluhy udalostí sú nastavené ako funkcie pripojené k widgetu
  • - po vytvorení dialógu sa spustí slučka udalostí
Ak ste už predtým písali pre GUI pomocou Tk, WxWidgets alebo WinAPI, bude vám to všetko znieť povedome. Ak nie, program je podrobne pokrytý komentármi.
Programový kód

Vrátane knižníc iup require("iuplua") require("iupluacontrols") require("iuplua_pplot") -- knižnica na prácu s Canvasom na uloženie grafu do súboru require("cdlua") require("iupluacd") require(" string ") -- globálne premenné pre widgety a nastavenia programu -- maximálny počet grafov plots_number = 5 -- tabuľkové widgety, kde budú umiestnené widgety pre zadávanie údajov pre každý graf tabs = () -- widgety kontajnery vboxes = () -- checkboxy zaškrtávacie políčka pre výber grafov, ktoré sa majú zostaviť = () -- tu ukladáme widgety s textom údajov o bodoch súradnice = () -- widgety menovky pre každý pozemok legendy = () -- widgety na označenie súradnicových osí global_legend = () -- na najväčšiu hanbu neexistuje žiadna štandardná funkcia delenia Lua string:split(sep) local sep, fields = sep alebo ":", () local pattern = string.format("([^%s]+)" , sep) self:gsub (pattern, function(c) fields[#fields+1] = c end) return fields end -- funkcia vykreslí graf na plotri v zadaných bodoch funct 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 = "Stavať"} -- колбэк для кнопки "построить график" function plot_btn:action() -- создать виджет графопостроителя plot = iup.pplot { expand="YES", TITLE = "jednoduchá línia", 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 = "Uložiť" } -- теперь создаем само окно, где будет отображаться график 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 -- дописать при необходимости !} požadované rozšírenie pic = fs_dlg.value, ak nie (string.sub(pic, string.len(pic)-3) == ".emf"), potom pic = pic .. ".emf" end -- vytvorte pseudoplátno spojené so súborom tmp_cv = cd.CreateCanvas(cd.EMF, pic .. " 400x300") -- vykresľovanie na plátne iup.PPlotPaintTo(plot, tmp_cv) -- uloženie údajov do súboru cd.KillCanvas(tmp_cv) end end -- zobrazenie dialógového okna plot_dg: showxy(iup.CENTER, iup.CENTER) -- spustíme slučku udalostí pre dialóg if (iup.MainLoopLevel()==0) then iup.MainLoop() end end -- v slučke vytvoríme záložky, do ktorých umiestnime widgety -- na zber údajov pre i=1,plots_number do -- vytvorte textové widgety, do ktorých sa budú zadávať súradnice bodov coords[i] = () pre j = 1,2 do coords[i][j] = iup .text ( expand="HORIZONTAL", multiline = "YES", VISIBLELINES = 5 ) end -- widget na úpravu legiend popiskov grafu[i] = iup.text( expand = "HORIZONTAL" ) -- vytvorte kontajner kariet a vyplňte vboxy jej prvkov [i] = iup.vbox ( i up.hbox ( iup.label ( title = "(!LANG:Označenie grafu:" }, legends[i] }, iup.hbox { iup.label { title="X:", }, coords[i] }, iup.hbox { iup.label { title="Y:", }, coords[i] }; expand="YES", } -- меняем заголовк вкладки vboxes[i].tabtitle = "Rozvrh" .. i -- создаем чекбокс, который будет указывать на то, нужно ли строить -- график по данным из указанной вкладки checkboxes[i] = iup.toggle{ title= "Rozvrh" .. i, value = "ON" } end -- теперь из заполненных нами контейнеров создаем вкладки tabs = iup.tabs{unpack(vboxes)} -- создаем текстовые виджеты для редактирования подписей осей global_legend = iup.text{} global_legend = iup.text{} -- создаем фрейм для !} Všeobecné nastavenia grafický rámec = iup.frame ( iup.vbox ( iup.label( title="(!LANG:Použiť údaje:", expand="HORIZONTAL" }, iup.vbox { unpack(checkboxes) }, iup.label{}, -- пустую подпись можно использовать как распорку iup.label{title = "Podpisy"}, iup.hbox { iup.label{ title = "os X"}, global_legend }, iup.hbox { iup.label{ title = "Os Y"}, global_legend }, iup.label{}, plot_btn }; expand = "VERTICAL", } -- создаем главное окно программы и наносим на него настройки и табы dg = iup.dialog { iup.hbox { frame, tabs }, title="Zostavenie grafu", size = "HALF" } -- показываем главное окно и запускаем обработку событий dg:showxy(iup.CENTER, iup.CENTER) if (iup.MainLoopLevel()==0) then iup.MainLoop() end !}

Pár slov o nasadení
Skript je možné spustiť príkazom:

Luaplotter.exe

V tomto prípade budú knižnice zahrnuté z podadresára clibs/, ktorý sa nachádza v adresári, kde bola nainštalovaná Lua pre Windows. Ak chcete skript a knižnice zabaliť čo najkompaktnejšie na prenos na iný počítač, stačí skopírovať nasledujúce súbory do jedného priečinka (označeného relatívnymi cestami z inštalačného adresára 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/iuplua51.dll clibs/iuplua_pplot51.dll clibs/iupluacontrols51.dll clibs/iupluacontrols51.dll clibs/freetype6.dll

Do tohto priečinka nezabudnite umiestniť skript s programom. Teraz môžete tento priečinok preniesť na iný počítač a spustiť programy pomocou vyššie uvedeného príkazu. V tomto prípade nie sú potrebné žiadne ďalšie kroky na inštaláciu knižníc a runtime.

Bohužiaľ, súbory cd.dll, cdluad51.dll a iupcd.dll nemusia v tejto verzii Lua pre Windows fungovať správne, preto ich odporúčam prevziať z archívu pomocou odkazu nižšie.

Výsledky
Archivujte s pracovnou verziou, pre pohodlie bol pridaný spúšťač app.bat.

Snímky obrazovky:

Výsledkom je, že sme dostali, aj keď nemotornú, utilitu, ktorá má rovnakú funkcionalitu, ako keby bola napísaná vo „serióznom“ programovacom jazyku. Zároveň je ľahko nasaditeľný a s celkovou hmotnosťou menej ako 2 mb. Spotreba pamäte - asi 7 MB. Zdrojový kód je editovateľný, samotná Lua je interaktívne zrozumiteľná, čo zjednodušuje vývoj takéhoto softvéru v teréne.

Podľa môjho názoru je to vynikajúca voľba pre písanie vzdelávacieho softvéru pre školy a inštitúty, ako aj pre interné použitie v podnikoch. Keďže na podobných miestach v celom SNŠ je stále veľa slabých strojov, používanie Lua týmto spôsobom dáva zmysel, najmä vo svetle postupného príchodu Linuxu na desktopy. Okrem toho, tendencia stratiť zdrojové kódy softvéru, ktorý si vlastnoručne napísal, s jeho hroznou chybou možno prirovnať k národnej katastrofe.

Štítky: Pridajte štítky

LUA Plugin - potrebný pre niektoré modifikácie, ktoré sú napísané v skriptový háčik V pre GTA 5.

Lua je skriptovací programovací jazyk vyvinutý divíziou Tecgraf (Computer Graphics Technology Group) Katolíckej univerzity v Rio de Janeiro (Brazília). Jazykový tlmočník je voľne distribuovaný, open source v jazyku C.

Z hľadiska funkcií, ideológie a implementácie je jazyk najbližšie k JavaScriptu, ale Lua má výkonnejšie a oveľa flexibilnejšie konštrukcie. Hoci Lua explicitne neobsahuje koncepty triedy a objektu, objektovo orientované programovacie mechanizmy, vrátane viacnásobnej dedičnosti, sa dajú ľahko implementovať pomocou metatabuľiek, ktoré sú zodpovedné aj za preťaženie operátora atď. Implementovaný objektovo orientovaný programovací model je prototypový (napr. v JavaScripte).

LUA plugin pre Script Hook V

Jazyk je široko používaný na vytvorenie replikovateľného softvér(píše sa napr GUI balík Adobe Lightroom). Obľúbenosť si získal aj ako programovací jazyk pre úrovne a rozšírenia v mnohých hrách (vrátane World of Warcraft) vďaka ľahkému vloženiu, rýchlosti vykonávania kódu a ľahkému učeniu.

Ako nainštalovať

  1. Potrebujete nainštalovaný
  2. Potom stačí skopírovať všetky súbory z archívu (vrátane priečinkov) do koreňový priečinok gta 5.
  3. V budúcnosti sa skripty na LUA načítajú do priečinka "/scripts/addins"

Lua for Windows (LfW) je interpretovaný programovací jazyk vyvinutý divíziou Tecgraf skupiny Computer Graphics Technology Group Pápežskej katolíckej univerzity v Rio de Janeiro v Brazílii. Vyvinutý tlmočník je voľne distribuovaný s otvorenými zdrojovými textami v jazyku C.

Z hľadiska funkcií, ideológie a implementácie je jazyk najbližšie k JavaScriptu, ale Lua má výkonnejšie a oveľa flexibilnejšie konštrukcie. Hoci Lua explicitne neobsahuje koncepty triedy a objektu, objektovo orientované programovacie mechanizmy, vrátane viacnásobnej dedičnosti, sa dajú ľahko implementovať pomocou metatabuľiek, ktoré sú zodpovedné aj za preťaženie operátora atď. Implementovaný objektovo orientovaný programovací model je prototypový (ako napr. a v JavaScripte).

Jazyk je široko používaný na vytváranie replikovaného softvéru - najmä je na ňom napísané grafické rozhranie balíka. Adobe Photoshop Lightroom. Do popredia sa dostal aj ako programovací jazyk pre úrovne a rozšírenia v mnohých hrách (napríklad World of Warcraft) vďaka ľahkému vloženiu, rýchlosti vykonávania kódu a ľahkému učeniu.

Lua sa bežne označuje ako jazyk s viacerými paradigmami. Poskytuje malý súbor základných mechanizmov, ktoré možno rozšíriť na riešenie rôznych problémov, a nie súbor zložitých rigidných špecifikácií, ktoré zabezpečujú programovanie v jedinej paradigme.

Napríklad v Lua nie je explicitná podpora pre dedičnosť, ale je ľahko implementovaná pomocou metatabuľiek.

- Prípona (formát) sú znaky na konci súboru za poslednou bodkou.
- Počítač presne určuje typ súboru podľa prípony.
- Podľa Predvolené nastavenie systému Windows nezobrazuje prípony súborov.
- Niektoré znaky nemožno použiť v názve súboru a prípone.
- Nie všetky formáty súvisia s rovnakým programom.
- Nižšie sú uvedené všetky programy, pomocou ktorých môžete otvoriť súbor LUA.

Mnoho používateľov MS Windows si už dávno všimlo, že štandardný poznámkový blok je dosť nepohodlný program na používanie. Toto môže byť náhrada bezplatný editor textové súbory, ktorý poskytuje podporu syntaxe pre veľké množstvo programovacích jazykov. Program obsahuje pomerne široké možnosti a vyznačuje sa minimálnou spotrebou zdrojov procesora. Program umožňuje súčasne prezerať niekoľko dokumentov naraz a upravovať ich bez zatvárania nepotrebných okien. Sprístupnila sa aj možnosť, ako napríklad úprava rovnakého dokumentu v rôzne miestačo je veľmi pohodlné...

Notepad2 je jednoduchá aplikácia, ktorá vám umožňuje písať a upravovať text. Pomôže pri vytváraní HTML stránok, programovaní v rôznych jazykoch (CSS, Java, JavaScript, Python, SQL, Perl, PHP), keďže dokáže zvýrazniť kód. Program je postavený na princípe jednoduchého poznámkového bloku, je ľahký a skladný. Tento textový editor kontroluje páry vo všetkých zátvorkách, podporuje automatické odsadenie. Notepad2 nielen podporuje kódovanie ASCII a UTF-8, ale vie ich aj previesť. Umožňuje vrátiť nechcené operácie o mnoho úrovní späť. Podporuje blokový výber textových prvkov a má očíslované riadky...

Komodo Edit je praktický editor kódu, ktorý podporuje širokú škálu rôznych programovacích jazykov. Program dáva používateľom možnosť pracovať s niekoľkými súbormi naraz, písanie kódu sa stane efektívnejším pomocou funkcie automatického dopĺňania, tipy. Aplikácia umožňuje automaticky zvýrazniť premenné, keď sú vybrané. Pomocou editora môžete prezerať súbory v iných programovacích jazykoch. Program podporuje farbenie syntaxe, odsadenie. Môže kontrolovať parametre syntaxe, úryvky používané na ukladanie kódu zdrojového stĺpca. Má jednoduchý režim úprav a podporuje drag and drop prvkov...

Na internete je množstvo programov, ktoré umožňujú úpravu zdroj iný program, súbor atď. Avšak väčšina z týchto programov je len textový editor ako poznámkový blok. Od vyššie uvedeného editora sa líšia iba tým, že majú zvýraznenie syntaxe. V niektorých prípadoch však táto funkčnosť programu nestačí. Programátor môže potrebovať rýchlo nájsť rôzne časti dokumentu. A teraz sa konečne objavil program, ktorý vám umožňuje tento problém vyriešiť. Program sa nazýva SynWrite. jej rozlišovacia črta- prítomnosť navigačnej lišty so stromom, ktorý ...

Lua skripty

Skript napísaný v jazyku Lua nemá žiadnu špeciálnu funkciu, od ktorej by sa začínalo jeho vykonávanie. Na skript sa dá pozerať jednoducho ako na súbor príkazov (inštrukcií), ktoré sa vykonávajú od prvej inštrukcie.

Skript môže byť buď veľmi jednoduchý, pozostávajúci len z jedného príkazu, alebo veľmi zložitý, obsahujúci desiatky, stovky alebo dokonca tisíce inštrukcií. Nasledujúce pokyny môžu byť oddelené bodkočiarkou (;). Táto požiadavka však nie je povinná, takže celý kód uvedený nižšie je z hľadiska syntaxe správny:

Práca s premennými v Lua

Premenné sa používajú na ukladanie hodnôt počas vykonávania skriptu.

Názvy premenných v jazyku Lua

Názvy premenných (identifikátory) v Lua môžu byť ľubovoľné poradie písmen, číslic a podčiarkovníkov, ktoré nezačínajú číslom.

Poznámka

V jazyku Lua sa rozlišujú veľké a malé písmená, takže abc, Abc, ABC sú rôzne názvy.

V tabuľke nižšie sú uvedené slová, ktoré sú vyhradené jazykom Lua a nemožno ich použiť v názvoch premenných:

a rozbiť robiť inak, ak

koniec nepravda pre funkciu if

v miestnom nula nie resp

repeat return potom true do

Okrem toho všetky názvy, ktoré začínajú podčiarkovníkom, za ktorým nasledujú veľké písmená(napr. _VERSION) sú tiež vyhradené.

Aké sú premenné v Lua?

Premenné v Lua môžu byť globálne alebo lokálne. Ak premenná nie je explicitne deklarovaná ako lokálna, považuje sa za globálnu.

Lua globálne premenné

Globálna premenná sa objaví v momente, keď je jej priradená prvá hodnota. Pred priradením prvej hodnoty je prístup ku globálnej premennej nulový.

MsgBox(tostring(g)) --> nula

MsgBox(tostring(g)) --> 1

Globálna premenná existuje, pokiaľ existuje prostredie na spustenie skriptu a je dostupná pre akýkoľvek kód Lua spustený v tomto prostredí.

Ak je to potrebné, môžete explicitne odstrániť globálnu premennú jednoduchým nastavením na nulu.

g = 1 - vytvorte globálnu premennú g s hodnotou 1

g = nula - odstráňte globálnu premennú g

MsgBox(tostring(g)) --> nula

Všetky globálne premenné sú polia v bežnej tabuľke nazývanej globálne prostredie. Táto tabuľka je dostupná prostredníctvom globálnej premennej _G. Keďže polia globálneho prostredia sú všetky globálne premenné (vrátane samotného _G), potom _G._G == _G.

Miestne premenné Lua

Všetky lokálne premenné musia byť deklarované explicitne pomocou kľúčového slova local. Lokálnu premennú môžete deklarovať kdekoľvek v skripte. Deklarácia môže obsahovať priradenie počiatočnej hodnoty premennej. Ak nie je priradená žiadna hodnota, premenná obsahuje nulu.

local a - deklarovať lokálnu premennú a

lokálna b = 1 - deklarujte lokálnu premennú b, priraďte jej hodnotu 1

lokálne c, d = 2, 3 - deklarujte lokálne premenné c a d, priraďte im hodnoty 2 a 3

Rozsah lokálnej premennej začína po deklarácii a pokračuje až do konca bloku.

Poznámka

Rozsah premennej je časť programového kódu, v rámci ktorej máte prístup k hodnote uloženej v tejto premennej.

Blok znamená:

telo riadiacej štruktúry (ak-potom, inak, na, kým, zopakovať);

funkčné telo;

kus kódu uzavretý v kľúčových slovách do konca.

Ak je lokálna premenná definovaná mimo akéhokoľvek bloku, jej rozsah siaha až na koniec skriptu.

local i = 1 - premenná i je v rámci skriptu lokálna

kým<= a do - цикл от 1 до 5

local a = i^2 - premenná a je lokálna v rámci cyklu while

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

MsgBox(a) -->

ak som > 5 tak

lokálne a - premenná a je vo vnútri lokálna

MsgBox(a) --> 10

MsgBox(a) --> 5 (tu odkazuje na globálne a)

local a = 20 - premenná a je lokálna vnútri do-end

MsgBox(a) --> 20

MsgBox(a) --> 5 (tu odkazuje na globálne a)

Poznámka

Vždy, keď je to možné, sa odporúča použiť lokálne premenné namiesto globálnych. Tým sa zabráni znečisteniu globálneho menného priestoru a poskytne lepší výkon (pretože prístup k lokálnym premenným v Lua je o niečo rýchlejší ako prístup k globálnym).

Typy údajov Lua

Aké typy údajov podporuje jazyk Lua?

Lua podporuje nasledujúce typy údajov:

1. Nil (nič). Zodpovedá absencii hodnotová premenná. Tento typ je reprezentovaný jedinou hodnotou, nula.

2. Boolean (logický). Komu tento typ hodnoty zahŕňajú false (false) a true (true).

Pri vykonávaní logických operácií sa hodnota nil považuje za nepravdivú. Všetky ostatné hodnoty vrátane čísla 0 a prázdneho reťazca sa považujú za pravdivé.

3. Číslo (numerické). Používa sa na reprezentáciu číselných hodnôt.

Číselné konštanty môžu byť voliteľné zlomková časť a voliteľný desatinný exponent špecifikovaný znakmi "e" alebo "E". Celočíselné číselné konštanty možno zadať v hexadecimálnej sústave pomocou predpony 0x.

Príklady platných číselných konštánt: 3, 3,0, 3,1415926, 314,16e-2, 0xff.

4. String (šnúrka). Používa sa na reprezentáciu reťazcov.

Hodnoty reťazca sú špecifikované ako postupnosť znakov uzavretých v jednoduchých alebo dvojitých úvodzovkách:

a = "toto je reťazec"

b = "toto je druhý riadok"

Reťazce v úvodzovkách môžu interpretovať sekvencie escape podobné C, ktoré začínajú znakom „\“ (obrátená lomka):

\b (medzera),

\n (riadkový posuv),

\r (návrat vozíka);

\t (horizontálna karta),

\\ (obrátená lomka);

\"" (dvojitý citát);

\" (jediná úvodzovka).

Poznámka

Znak v reťazci môže byť reprezentovaný aj jeho kódom pomocou sekvencie escape:

kde ddd je sekvencia nie viac ako troch číslic.

Okrem úvodzoviek možno na definovanie reťazca použiť aj dvojité hranaté zátvorky:

Definovanie reťazca s dvojitými hranatými zátvorkami vám umožňuje ignorovať všetky sekvencie escape, t. j. reťazec je vytvorený úplne podľa popisu:

miestne a = [] v Lua]=]

Bude existovať výraz: „definícia reťazca[] v jazyku Lua“

5. Funkcia (funkcia). Funkcie v Lua môžu byť zapísané do premenných, odovzdané ako parametre iným funkciám a vrátené ako výsledok vykonania funkcií.

6. Tabuľka (tabuľka). Tabuľka je množina párov „kľúč“ – „hodnota“, ktoré sa nazývajú polia alebo prvky tabuľky. Kľúče aj hodnoty polí tabuľky môžu byť akéhokoľvek typu okrem nuly. Tabuľky nemajú pevnú veľkosť: kedykoľvek do nich môžete pridať ľubovoľný počet prvkov.

Prečítajte si viac v článku "Vytváranie tabuliek v Lua"

7. Údaje používateľa (údaje používateľa). Ide o špeciálny dátový typ. Hodnoty tohto typu nemožno vytvárať ani upravovať priamo v skripte Lua.

Používateľské údaje sa používajú na reprezentáciu nových typov vytvorených vo volaní skriptu alebo v knižniciach napísaných v jazyku C. Napríklad knižnice rozšírenia Lua pre „CronosPRO“ používajú tento typ na reprezentáciu objektov, ako sú:

databanky (trieda banky);

databázy (trieda Base);

záznamy (trieda Záznam) atď.

8. Niť (niť). Zodpovedá toku vykonávania. Tieto prúdy nie sú v žiadnom prípade spojené s operačný systém a sú podporované výlučne prostredníctvom samotnej Lua.

Ako nastaviť typ premennej v Lua?

Lua explicitne nešpecifikuje typ premennej. Typ premennej je nastavený v čase, keď je premennej priradená hodnota. Každej premennej je možné priradiť hodnotu akéhokoľvek typu (bez ohľadu na to, aký typ predtým obsahovala).

a = 123 - premenná a má typové číslo

a = "123" - teraz premenná a je typu string

a = true - premenná a je teraz typu boolean

a = () - teraz premenná a je typu tabuľka

Poznámka

Premenné typu tabuľka, funkcia, vlákno a používateľské údaje neobsahujú samotné údaje, ale ukladajú odkazy na zodpovedajúce objekty. Pri priraďovaní, prechode do funkcie ako argumentu a následnom návrate z funkcie sa objekty neskopírujú, skopírujú sa len odkazy na ne.

a = () - vytvorte tabuľku. Odkaz na tabuľku je umiestnený v premennej a

b = a - premenná b sa vzťahuje na rovnakú tabuľku ako a

a = 10 - prvku tabuľky s indexom 1 je priradená hodnota 10

MsgBox(b) --> "10"

MsgBox(a) --> "20"

Ostatné údaje sú okamžité hodnoty.

MsgBox(a) --> "20"

MsgBox(b) --> "10"

Ako získať typ premennej v Lua?

Typ hodnoty uloženej v premennej je možné zistiť pomocou štandardného typu funkcie. Táto funkcia vracia reťazec obsahujúci názov typu ("nula", "číslo", "reťazec", "boolean", "tabuľka", "funkcia", "vlákno", "userdata").

t = typ("toto je reťazec") - t sa rovná "reťazec"

t = typ (123) - t je "číslo"

t = typ (typ) - t sa rovná "funkcii"

t = typ (pravda) - t je "booleovské"

t = typ (nulové) - t je "nulové"

t = typ(CroApp.GetBank()) - t sa rovná "userdata"

Ako previesť typ premennej v Lua?

Lua v prípade potreby automaticky prevádza čísla na reťazce a naopak. Ak je napríklad hodnota reťazca operandom v aritmetickej operácii, skonvertuje sa na číslo. Podobne sa na reťazec skonvertuje numerická hodnota, ktorá sa vyskytne tam, kde sa očakáva reťazec.

a = "10" + 2 - a sa rovná 12

a = "10" + 2 - a sa rovná "10 + 2"

a = "-5,3e-10"*"2" - a sa rovná -1,06e-09

a = "reťazec" + 2 - Chyba! Nie je možné previesť "reťazec" na číslo

Hodnotu akéhokoľvek typu je možné explicitne previesť na reťazec pomocou štandardnej funkcie tostring.

a = tostring(10) - a je "10"

a = tostring(true) - a sa rovná "true"

a = tostring(nula) - a sa rovná "nule"

a = tostring (( = "toto je pole 1")) - a sa rovná "tabuľka: 06DB1058"

Z predchádzajúceho príkladu môžete vidieť, že obsah tabuliek nie je konvertovaný funkciou tostring. Túto transformáciu je možné vykonať pomocou funkcie render.

a = render(10) - a je "10"

a = render(true) - a sa rovná "true"

a = render (nulové) - a je "nulové"

a = render (( = "toto je pole 1")) - a je "( = "toto je pole 1")"

Ak chcete explicitne previesť hodnotu na číslo, môžete použiť štandardnú funkciu tonumber. Ak je hodnotou reťazec, ktorý je možné previesť na číslo (alebo je už číslom), funkcia vráti výsledok prevodu, inak vráti nulu.

a = tonumber("10") - a sa rovná "10"

a = tonumber("10"..5") - a sa rovná 10,5

a = tonumber(true) - a sa rovná "nule"

a = tonumber (nula) - a sa rovná "nule"

Usporiadanie komentárov v Lua

Komentár v Lua začína dvoma znamienkami mínus (--) a pokračuje až do konca riadku.

local a = 1 - jednoriadkový komentár

Ak za znakmi "--" bezprostredne nasledujú dve otváracie hranaté zátvorky ([[), komentár je viacriadkový a pokračuje až do dvoch uzatváracích hranatých zátvoriek (]]).

lokálne a = 1 - [[ viacriadkový

komentár ]]

Dvojité zátvorky v komentároch môžu byť vnorené. Aby nedošlo k ich zámene, medzi zátvorky sa vkladá znamienko rovnosti (=):

miestne a = [[Kronos Company]] - [=[

miestne a = [[Kronos Company]]

Počet znakov "=" určuje vnorenie:

local a = [=[definícia nejakého reťazca [] v Lua]=] --[==[

local a = [=[definícia nejakého reťazca [] v Lua]=]

Operácie používané v Lua

Vo výrazoch napísaných v jazyku Lua je možné použiť nasledujúce druhy operácií:

1. Aritmetické operácie.

Lua podporuje nasledujúce aritmetické operácie:

+ (sčítanie);

- (odčítanie);

* (násobenie);

/ (oddelenie);

^ (umocnenie);

% (zvyšok delenia).

Poznámka

Aritmetické operácie sú použiteľné pre čísla aj reťazce, ktoré sú v tomto prípade prevedené na čísla.

2. Porovnávacie operácie.

V jazyku Lua sú povolené nasledujúce operácie porovnávania hodnôt:

== (rovná sa);

~= (nerovná sa);

< (меньше);

> (väčšie);

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

>= (väčšie alebo rovné).

Poznámka

Porovnávacie operácie sa vždy vrátia boolovská hodnota pravda alebo lož.

Pravidlá pre prevod čísel na reťazce (a naopak) počas porovnávania nefungujú, t. j. výraz "0" == 0 má za následok nepravdu.

3. Logické operácie.

Komu logické operácie týkať sa:

a (logické AND).

Operátor and vráti svoj prvý operand, ak sa vyhodnotí ako nepravda alebo nula. V opačnom prípade operácia vráti druhý operand (a tento operand môže byť akéhokoľvek typu).

a = (nula a 5) - a sa rovná nule

a == (nepravda a 5) - a je nepravda

a == (4 a 5) - a sa rovná 5

alebo (logické ALEBO).

Operátor alebo vráti prvý operand, ak nie je ani nepravdivý, ani nulový, inak vráti druhý operand.

a == (4 alebo 5) - a sa rovná 4

a == (nepravda alebo 5) - a sa rovná 5

Poznámka

hlavolam operácie a a alebo môže vrátiť hodnoty akéhokoľvek typu.

Logické operácie a/alebo vyhodnocujú hodnotu druhého operandu iba vtedy, ak je potrebné ho vrátiť. Ak sa nevyžaduje, druhý operand sa nevyhodnocuje. Napríklad:

a == (4 alebo f()) - funkcia f() sa nezavolá

nie (logické NIE).

Operátor nie vždy vráti hodnotu true alebo false.

4. Činnosť zreťazenia.

Na zreťazenie (spojenie) reťazcov použite operáciu ... (dve bodky).

a = "Kronos".."-".."Inform" - premenná a získa hodnotu "Kronos-Inform"

Poznámka

Ak jeden alebo oba operandy sú čísla, skonvertujú sa na reťazce.

a = 0..1 - premenná a dostane hodnotu "01"

5. Operácia získania dĺžky.

Lua definuje operátor dĺžky #, ktorý možno použiť na získanie dĺžky reťazca.

a = "reťazec"

len = #a - len sa rovná 6

len = #"ešte jeden riadok" - dĺžka je 10

Poznámka

Na zistenie maximálneho indexu (alebo veľkosti) poľa môžete použiť aj operátor #. Ďalšie podrobnosti nájdete v článku „Práca s poliami v jazyku Lua“.

Prednosť operátora v Lua

V Lua sa operácie vykonávajú podľa nasledujúcej priority (v zostupnom poradí):

2. nie # - (unárne)

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

Volanie skriptov z formulárov

Každý formulár (vrátane vnorených formulárov) má priradený samostatný skript, ktorý zvyčajne obsahuje funkcie, ktoré spracovávajú udalosti formulára a jeho prvkov.

Po spustení formulára sa jeho skript načíta do globálneho prostredia. Keď nastane udalosť formulára alebo jeho prvku, systém zavolá funkciu handlera priradenú k tejto udalosti.

Treba poznamenať, že formulárový skript, hoci neobsahuje volanie funkcie modulu, je v skutočnosti modul. To znamená, že premenné deklarované vo formulárovom skripte bez lokálneho kľúčového slova nie sú vystavené globálnemu prostrediu a sú dostupné iba v tomto skripte. Ak je potrebné sprístupniť hodnotu iným formulárovým skriptom, musí byť explicitne definovaná v globálnej tabuľke _G:

miestne a = _G.var

Bloky príkazov (pokynov)

Hlavnými operátormi Lua sú:

zadanie;

podmienený operátor;

operátorov na organizovanie cyklov.

Skupinu príkazov možno spojiť do bloku (zložený príkaz) pomocou konštruktu do...end.

do - začiatok bloku

<оператор1>- blokové telo

<оператор2>

<операторN>

koniec - koniec bloku

Blok otvára nový rozsah, v ktorom môžete definovať lokálne premenné.

a = 5 - globálna premenná a

local a = 20 - lokálna premenná a je definovaná vo vnútri do-end

MsgBox(a) --> 20

MsgBox(a) --> 5 (tu je už odkaz na globálne a)

Operátor pridelenia v Lua

Priradenie mení hodnotu premennej alebo poľa tabuľky. V najjednoduchšej forme môže úloha vyzerať takto:

a = 1 - premennej a je priradená hodnota 1

a = b + c - premennej a je priradený súčet hodnôt premenných b a c

a = f(x) - premennej a je priradená hodnota vrátená funkciou f(x)

V Lua je povolené takzvané viacnásobné priradenie, keď niekoľko premenných naľavo od operátora priradenia dostane hodnoty niekoľkých výrazov napísaných napravo od operátora priradenia:

a, b = 1, 5*c - a sa rovná 1; b sa rovná 5*c

Ak je premenných viac ako hodnôt, premenným „navyše“ sa priradí nula.

a, b, c = 1, 2 - a sa rovná 1; b je 2; c sa rovná nule

Ak existuje viac hodnôt ako premenných, "extra" hodnoty sa ignorujú.

a, b = 1, 2, 3 - a sa rovná 1; b je 2; hodnota 3 sa nepoužíva

Viacnásobné priradenie je možné použiť na výmenu hodnôt medzi premennými:

a = 10; b = 20 - a je 10, b je 20

a, b = b, a - teraz a je 20, b je 10

Podmienečné vyhlásenie (ak) v jazyku Lua

ak vyhlásenie overuje pravdivosť daný stav. Ak je podmienka pravdivá, vykoná sa časť kódu, ktorá nasleduje. kľúčové slovo potom (oddiel potom). V opačnom prípade sa vykoná kód nasledujúci za kľúčovým slovom else (sekcia else).

ak a > b potom

návrat a - ak je a väčšie ako b, vráti a

návrat b - v opačnom prípade návrat b

Časť else je voliteľná.

Ak< 0 then

a = 0 - ak je a menšie ako 0, nastavte a na 0

Namiesto vnorených príkazov if môžete použiť konštrukt elseif. Napríklad nasledujúci kód:

bude sa ľahšie čítať, ak ho nahradíte nasledujúcim:

návrat "Ivan" - ak sa a rovná 1

elseif a == 2 potom

návrat "Peter" - ak a je 2

elseif a == 3 potom

návrat "Sergey" - ak sa a rovná 3

vráťte "No taký hráč" - ak a nie je žiadny z uvedených

Slučka s podmienkou (zatiaľ čo) v Lua

Príkaz while je určený na organizovanie cyklov s podmienkou a má nasledujúci tvar:

zatiaľ čo robiť

... - telo slučky

Pred každou iteráciou cyklu sa kontroluje podmienka :

ak je podmienka nepravdivá, cyklus sa ukončí a riadenie sa prenesie do prvého príkazu nasledujúceho po príkaze while;

ak je podmienka pravdivá, vykoná sa telo cyklu, po ktorom sa všetky akcie zopakujú.

zatiaľ čo i > 0 do - slučka od 10 do 1

t[i] = "pole"..i

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

pričom i > 0 do - hľadajte zápornú hodnotu v poli

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

i = i - 1 - inak prejdite na ďalší prvok

ak som > 0, potom

MsgBox("Index zápornej hodnoty: "..i)

MsgBox("Pole neobsahuje žiadne záporné hodnoty")

Poznámka

Slučka s dodatočnou podmienkou (opakovanie) v Lua

Operátor opakovania je určený na organizovanie cyklov s dodatočnou podmienkou a má nasledujúci tvar:

... - telo slučky

kým

Telo cyklu sa vykonáva až do splnenia podmienky nestane sa pravdou. Podmienka sa kontroluje po vykonaní tela cyklu, takže telo cyklu sa v každom prípade vykoná aspoň raz.

Sčítajte hodnoty poľa a, kým súčet nepresiahne 10

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

súčet = súčet + a[i]

do súčtu > 10

MsgBox("Pridané ..i.." položky. Súčet sa rovná "..súčet)

Príkaz break môžete použiť na prerušenie cyklu pred jeho skončením.

Poznámka

Ďalšie informácie o funkciách používania príkazu break nájdete v článku „Príkazy break a return“

Slučky s príkazom for v jazyku Lua

Príkaz for je určený na organizovanie slučiek a umožňuje dve formy zápisu:

jednoduché (číselné pre);

predĺžený (univerzálny pre).

Jednoduchý tvar príkazu for

Jednoduchý tvar príkazu for je nasledovný:

pre var = exp1, exp2, exp3 do

... - telo slučky

Telo cyklu sa vykoná pre každú hodnotu slučková premenná(counter) var v rozsahu od exp1 do exp2, s krokom exp3.

Poznámka

Krok nemusí byť špecifikovaný. V tomto prípade sa rovná 1.

pre i = 1, 10 do - slučka od 1 do 10 s krokom 1

MsgBox("i sa rovná"..i)

pre i = 10, 1, -1 do - slučka od 10 do 1 s krokom -1

MsgBox("i sa rovná"..i)

Poznámka

Výrazy exp1, exp2 a exp3 sa vyhodnocujú iba raz, pred začiatkom cyklu. Takže v nižšie uvedenom príklade sa funkcia f(x) zavolá na výpočet hornej hranice slučky iba raz:

pre i = 1, f(x) do - cyklus od 1 do hodnoty vrátenej f()

MsgBox("i sa rovná"..i)

Premenná cyklu je lokálna pre príkaz cyklu a nie je definovaná na konci cyklu.

pre i = 1, 10 do - cyklus od 1 po hodnotu vrátenú f()

MsgBox("i sa rovná"..i)

MsgBox("Po opustení slučky je i "..i") - Chyba! ja sa rovná nule

Poznámka

Hodnotu premennej slučky nie je možné zmeniť vo vnútri slučky: dôsledky takejto zmeny sú nepredvídateľné.

Príkaz break sa používa na ukončenie cyklu pred jeho dokončením.

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

for i = 1,#a do - hľadajte zápornú hodnotu v poli

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

index = i - uloženie indexu nájdenej hodnoty...

zlomiť - a zlomiť slučku

MsgBox("Index zápornej hodnoty: "..index)

Poznámka

Ďalšie informácie o funkciách používania príkazu break nájdete v článku "Príkazy break a return")