A szabványos könyvtárakban olyan hasznos függvényeket találunk, amik közvetlenül a C API-n keresztül lettek implementálva. Néhányuk alapvető szolgáltatást nyújt (például type és getmetatable), mások az I/O kezelést könnyítik.
A Luaban a következő könyvtárak találhatók:
Hogy ezekhez a könyvtárakhoz hozzáférjünk, a C host programnak meg kell hívnia a luaL_openlibs függvényt, ami hozzáférést biztosít az összes könyvtárhoz. Lehetőség van őket egyenként is megnyitni: a luaopen_base függvény például a basic library-hez van. Ezek a függvények a lualib.h-ban vannak deklarálva és nem közvetlenül kell meghívni őket, hanem a lua_call használatával.
v értéke hamis (nil vagy false), különben
visszaadja minden paraméterét. A message egy hiba üzenet. Ha nem adjuk meg,
akkor az alapértelmezett értéket dobja, ami: "assertion failed!".
opt paraméterének megfelelően.
arg paraméter határozza megarg/100 lesz az új szünet értékarg/100 lesz a lépés szorzó új értéke
message paramétert.
Általában kapunk valami információt az hiba helyére vonatkozóan az üzenet elején.
A level paraméter meghatározza a hogy kapjuk meg a hiba helyét. Alapértelmezett
értéke az 1 azt jelenti, hogy a hiba ott volt, ahol a függvényt meghívták. 2 esetén arra a függvényre
mutat, ami meghívta az error függvényt. 0 esetén a hibaüzenet ad információt a
hiba helyéről.
f függvény által használt környezetet. f lehet
egy Lua függvény vagy egy szám ami egy függvényt azonosít verem szinten.
object paraméternek nincs metatáblája, nil-t ad vissza, egyébként
ha az object metatáblájának van "__metatable" mezője, akkor annak az értékét, ha
nincs neki, akkor magát a metatáblát adja vissza.
t táblát és a 0-át
next függvénnyel, a t táblával és
a nil-lel.
f függvényt védett módban a megadott paraméterekkel. Ez azt jelenti
hogy a hiba nem terjed tovább. pcall elkapja a hibát és vissza ad egy státusz kódot.
Az első eredmény a státusz kód (boolean), ami igaz, ha a hívás sikeres volt, és ebben az
esetben a hívás eredményét is visszaadja. Bármilyen hiba esetén egy false-t kapunk és egy
hiba üzenetet.tostring
függvényt használja, hogy a paramétereket stringé konvertálja. Ez nem a formázott
kiíratáshoz készült, általában debbug-olásra használják. Formázott kiíratáshoz a
string.format függvény használatos.
v1 egyenlő-e v2-vel.
Egy boolean értékkel tér vissza.
table[index] valódi értékét, mindenféle meta eljárás
használata nélkül. A table paraméternek egy táblának kell lennie, az
index paraméter bármi lehet.
table[index] értéket a value paraméternek
megfelelően. A table paraméternek egy táblának kell lennie, az
index paraméter bármi lehet, kivéve nil, és a value
bármilyen Lua érték lehet. Ez a függvény egy táblát ad vissza
index egy szám, akkor visszaadja az összes index-edik paraméter
utáni paramétert. Egyébként az index paraméter "#" kell legyen, és ekkor
a select visszaadja az összes extra paramétert, amit kapott.
metatble nil, akkor törli a tábla
metatábláját. Ha az eredeti metatáblának volt _metatable mezője, akkor hiba
váltódik ki.base paramétert is, ami a számrendszer alapját állítja. Ez a szám 2 és 36 között kell legyen.
A 10 fölötti számrendszerekben a 'A' betű jelenti a 10-et, a 'B' a 11-et és így tovább (kis és nagybetű
nem számít). Az alapértelmezett érték a 10.
string.format függvényt.
"nil" (a string, nem az érték nil), "number", "string", "boolean", "table", "function", "thread",
és "userdata".
i értéke 1,
j értéke pedig a lista hossza, amit a length operátor határoz meg.
pcall függvényhez, kivéve, hogy itt definiálhatunk saját
hiba kezelőt. xpcall meghívja az f függvényt protected módban. Az
err paraméter a hibakezelésre van. Ha f-ben kiváltódik egy hiba, akkor
az nem terjed tovább, hanem az xpcall meghívja az err függvényt az eredeti
hiba objektummal, és egy (boolean) státusz kóddal tér vissza, ami true ha a hívás sikeres
volt, ebben az esetben a hívás összes eredményét is megkapjuk. Bármiféle hiba esetén a visszatérési érték
false és az err függvény visszatérési értéke.
A package könyvtár alapvető eszközöket tartalmaz modulok betöltéséhez
Luában. A require függvényt a globális névtérbe exportálja, minden
más függvény a package táblában érhető el. (A könyvtár leírása
az 5.2-es Lua verzión alapul.)
package.loaded táblába,
hogy ellenőrizze, nincs-e már betöltve a modul. Ha megtalálja a táblában, akkor
visszaadja a package.loaded[modname] értékét. Ellenkező esetben megpróbál
találni egy loadert (betöltőfüggvényt) a modulhoz.
A loader kereséséhez a package.searchers listát használja a függvény.
Ha ezt a listát megváltoztatjuk, akkor a Lua más módon fog modulokat betölteni.
Az alábbi leírás az alapértelmezett package.searchers működését dokumentálja.require függvény ellenőrzi a package.preload[modname]
értékét. Ha van értéke, akkor függvényként értelmezi ezt az értéket és ezt használja
loadernek. Ha nincs értéke, akkor a require függvény a package.path
alapján keres egy Lua loadert. Ha ez sem sikerül, akkor a package.cpath
alapján keres egy C loadert. Ha ezzel sem jár sikerrel, akkor az
ún. all-in-one keresőt indítja el. (Lsd. a package.searchers leírását lentebb.)require függvény talált egy loadert, akkor meghívja azt és
két argumentumot ad át neki: a modname-et és egy plusz argumentumot
attól függően, hogy hogyan találta meg a loadert. (Pl. ha egy fájlból jött,
akkor a plusz argumentum a fájl neve.)package.loaded[modname] alá. Ha a loader nem ad vissza nem-nil értéket
és nem ad értéket a package.loaded[modname]-nek sem, akkor a require
függvény true értéket rendel a package.loaded[modname]-hez.require
nem talál betöltőt a modulhoz, akkor kivétel keletkezik.
'\' Windows alatt,
'/' mindenhol máshol.';'.'?'.'!'.'-'.require a C loaderek (betöltőfüggvények) kereséséhez használ. A Lua ugyanúgy inicializálja ezt a változót, mint a package.path változót, azaz a LUA_CPATH_5_2 környezeti változóból, vagy a LUA_CPATH környezeti változóból vagy a luaconf.h-ban definiált alapértelmezett útvonalból.
require által használt tábla; ebben tartjuk nyilván a már betöltött modulokat. Ha a require függvény meghívásakor egy modname értékre a package.loaded[modname] értéke nem false, akkor a require egyszerűen csak visszaadja az ott tárolt értéket.require nem fog másik táblát használni.
libname C könyvtárhoz. (A Lua egy beágyazott nyelv, nem csak standalone interpreterrel használhatjuk.)funcname értéke '*', akkor csak linkeli a könyvtárat, amivel hozzáférhetővé teszi az általa exportált szimbólumokat más könyvtárak számára. Ellenkező esetben megkeresi a nevezett függvényt a könyvtáron belül és visszaadja mint egy C függvényt. (Tehát a funcname függvénynek illeszkednie kell a lua_CFunction típusra.)require függvénnyel, ez a függvény nem keres elérési utak között és nem egészíti ki kiterjesztésekkel a fájlneveket, ezért libname a C könyvtár teljes elérési útját kell, hogy tartalmazza, kiterjesztéssel együtt. A funcname értéke a C könyvtár által exportált szimbólum pontos neve kell, hogy legyen. (Ez az érték fordítónként és linkerenként változhat.)require a Lua loaderek (betöltőfüggvények) kereséséhez használ.LUA_PATH_5_2 környezeti változóból, vagy a LUA_PATH környezeti változóból vagy a luaconf.h-ban definiált alapértelmezett útvonalból állítja be. (Ebben a sorrendben.) A környezeti változók értékében a ';;' szöveg az alapértelmezett útvonalra cserélődik.
require.)
Ez a változó csak egy referencia az igazi táblára; ha megváltoztatjuk az értékét, attól még a require nem fog másik táblát használni.
require által használt tábla, amivel a modulok betöltésének módja és sorrendje állítható be.
Minden bejegyzés a táblában egy keresőfüggvény. Amikor a require keres egy modult, akkor ezen tábla elemeit hívja meg növekvő sorrendben, egyetlen argumentumként átadva a betöltendő modul nevét. A keresőfüggvény egy másik függvényt (egy loadert) ad vissza és egy extra értéket, ami paraméterként lesz átadva a loadernek. Az extra érték lehet egy szöveg is egy hibaüzenettel, ha a keresőfüggvény nem találta a kért modul betöltőjét, de lehet nil is az értéke.package.searchers alapértelmezésben 4 keresőfüggvényt tartalmaz:
package.preload értékét, hogy tartalmaz-e loadert a modulhoz.package.path alatt tárolt elérési utakat használva. A keresés módja lentebb olvasható a package.searchpath leírásában.package.cpath alatt tárolt elérési utakat használva. Például, ha a C elérési utak a következők:'foo' modul keresésekor a ./foo.so, ./foo.dll és /usr/local/foo/init.so fájlokat próbálja a keresőfüggvény betölteni, ebben a sorrendben. Ha a betöltés sikeres volt, akkor megpróbál egy C függvényt keresni a könyvtáron belül, amit betöltőfüggvénynek tud használni. A keresett függvény neve a luaopen_ string, összefűzve a modul nevével, ahol minden pontot aláhúzásjelre cserélünk. Ezen kívül, ha a modul neve tartalmaz elválasztójelet ('-'), akkor a név elejét az első elválasztójelig (az elválasztójelet is beleértve) eltávolítjuk. Például, ha a modul neve a.v1-b.c, akkor a függvény neve luaopen_b_c lesz.
a.b.c modul betöltése esetén az a nevű C könyvtárat fogja keresni. Ha talál ilyen könyvtárat, akkor a teljes modulnévhez tartozó betöltőfüggvényt próbálja megtalálni, az előbbi példában a luaopen_a_b_c nevű függvényt. Ezzel a betöltővel több Lua modul is csomagolható egyetlen C könyvtárba és minden modulnak saját betöltőfüggvénye lehet.
package.preload táblát vizsgálja) mindegyik keresőfüggvény azt a fájlnevet adja vissza extra értékként, ahol a modult megtalálta. Az első keresőfüggvény nil értéket ad vissza.
name másolatára, amiben előtte a sep (alapértelmezésben '.') összes előfordulását kicserélte rep-re (alapértelmezésben a rendszer könyvtárelválasztó karaktere). Az így kapott értéket mint fájlnevet értelmezi és megpróbálja megnyitni.foo.a nevű modul betöltésekor a rendszer a ./foo/a.lua, ./foo/a.lc és /usr/local/foo/a/init.lua fájlokat próbálja megnyitni, ebben a sorrendben.nil-t és egy hibaüzenetet, ha nem tudott fájlt megnyitni. (A hibaüzenet tartalmazza az összes fájl nevét, amit megpróbált megnyitni.)
A coroutine műveletek a basic library egy alkönyvtárát képezik.
thread.
f-nek egy Lua függvénynek kell lennie.
co coroutine futtatását.
nil-t.
co coroutine státuszát egy stringben. Ez lehet "running", ha a coroutine
éppen fut, "suspended", ha fel van függesztve, "normal", ha aktív, de nem fut, és
"dead", ha a body függvény lefutott, vagy egy hiba miatt leállt. f törzsével. f-nek egy Lua függvénynek kell lennie.Luában a stringek 1-től indexeltek, a negatív indexek a string végétől visszafele számítanak. Így az utolsó karakter indexe (többek közt) -1. A string könyvtárban található eljárások a string táblából érhetők el. A legfontosabb műveletek:
s i-edik karakterének
belső numerikus kódját, vagy nilt,
ha az index nem megfelelő. Ha nincs megadva i, az első karakterre vonatkozik.printf-jéhez hasonlóan működő függvény
visszaad egy olyan stringet, ami a formatstringben lecseréli
a megfelelő opciókat a megadott paraméterek megfelelően formázott alakjára.
Az egyetlen eltérés, hogy a
*, l, L, n, p
és h
opciók nem használhatók,
de újként megjelenik a q, ami egy stringet alakít
biztonságosan visszaolvasható formára:
c, d, E, e, f,
g, G, i, o, u,
X és x opciók paraméterként egy számot várnak,
az q és s pedig egy stringet. A %s-sel
formázott stringek nem tartalmazhatnak 0 kódú karaktereket.
Az s egy olyan másolatát adja vissza, amelyben a
pat minden előfordulása a repl-re van cserélve (ha
n-t megadjuk, akkor legfeljebb n cserét hajt végre).
Második visszatérési értéke a stringben történt cserék száma.
Ha a repl string, akkor ez határozza meg, mire cserélődjön
az előfordulás. Ha van benne %n
alakú részstring (n = 1..9), akkor az az n-edik lefogott
részstring értékét jelenti (lásd később).
Ha a repl függvény, akkor meg fog hívódni minden csere alkalmával,
és sorra megkapja a lefogott részstringeket paraméterként.
Ha a minta nem tartalmaz lefogásokat, az egyedüli paraméter az egész találat lesz.
Az előfordulás az ezen függvény által visszaadott értékre cserélődik, vagy ha ez
nem string, akkor az üres stringre.
Néhány példa:
A mintában az alábbi karakterosztályok szerepelhetnek:
^$()%.[]*+-?
--- magát az x karaktert jelenti.
. --- bármilyen karakter.
%a --- betűk.
%c --- vezérlőkatakterek.
%d --- számjegyek.
%l --- kisbetűk.
%s --- space karakterek.
%u --- nagybetűk.
%w --- alfanumerikus karakterek.
%x --- hexadecimális számjegyek.
%z --- a 0 karakter (a mintában csak ilyen formában fordulhat elő).
[halmaz] --- karakterosztályok uniójának felel meg.
A szokásos szintaktikával intervallum is megadható. Így például
[%w_] (vagy [_%w]) alfanumerikus karakterre vagy az
aláhúzásra illeszkedik, a [0-7] egy oktális számjegyet jelent,
[0-7%l%-] pedig az oktális számjegyeken túl a kisbetűknek és a
kötőjelnek felel meg.
[^halmaz] --- halmaz komplementere.
Továbbá a kisbetűvel jelölt osztálynevek nagybetűs alakja azok komplementerére illeszkedik.
Ezek az osztályok önmagukban egy előfordulásra illeszkednek.
A karakterosztály nevét követő *, +
és ? karakterek rendre nem negatív, pozitív illetve 0 és 1
közötti előfordulást jelentenek. A - karakter
a *-hoz hasonló, de a legrövidebb részstringre illeszkedik.
A minta elején álló ^ és minta végén álló $ karakterek
a string elejére illetve végére illeszkednek, más helyen viszont nincs
különleges jelentésük.
A mintákban lehetnek alminták (lefogás). Mikor a minta illeszkedik,
az illeszkedés jelölt része elraktározódik (lefogódik). A számozásuk a kezdő
zárójelüknek megfelelően történik. Például a "(a*(.)%w(%s*))"
mintának a "a*(.)%w(%s*)"-ra illeszkedő része lesz az első lefogott
részstring. A .-ra illeszkedő karakter a második, és így tovább.
Speciális esetként az üres lefogás az aktuális stringpozíciót jelenti (és értéke egy szám).
Például ha a "()aa()" mintát keressük a "flaaap"
stringben, a két lefogás értéke 3 és 5.
A lefogott részekre később hivatkozhatunk, lásd a gsub
függvény leírásában.
Ez a könyvtár bitenkénti műveletek elvégzésére szolgáló függvényeket tartalmaz.
Minden függvény a bit32 táblában található.
A függvények alapértelmezésben numerikus argumentumokat fogadnak a
(-251,+251) intervallumból. Az argumentumok
normalizálásra kerülnek, modulo 232 után egészre kerekítéssel.
(A kerekítés iránya nem specifikált.)
Így mind a normalizált argumentumok, mind a visszaadott eredmények a
[0,232 - 1] intervallumba esnek.
Vegyük észre, hogy a bit32.bnot(0) értéke 0xFFFFFFFF
lesz, ami különbözik a -1-től.
x számot disp bittel jobbra eltolva.
disp bármilyen egész szám lehet, negatív érték esetén balra tolja el a biteket.disp abszolútértéke nagyobb, mint 31,
akkor az eredmény biztosan 0 vagy 0xFFFFFFFF lesz, mivel minden
eredeti bit eltűnik x-ből.x-en. Bármely x-re igaz az alábbi összefüggés:
assert(bit32.bnot(x) == (-1 - x) % 2^32)
n-ből képezhetünk,
a field helyiértéktől a field + width - 1 helyiértékig
kiemelve a biteket. A bitek számozása 0-tól (legkisebb helyiértékű) 31-ig
(legnagyobb helyiértékű) történik. Minden hivatkozott bitnek ebbe a
helyiérték-intervallumba kell beleesnie.width alapértelmezett értéke 1.
n másolatában a field és a
field + width - 1 helyiértékek közötti biteket v
értékével, majd visszaadja a kapott számot. A bitek helyiérték-intervallumáról
bővebb információk a bit32.extract függvény leírásában olvashatók.
x-et disp bittel balra elforgatva. A disp
értéke bármilyen egész szám lehet. Bármely elforgatásra igaz az alábbi összefüggés:
assert(bit32.lrotate(x, disp) == bit32.lrotate(x, disp % 32))disp értékek jobbra forgatnak.
x-et disp bittel balra eltolva. A disp
értéke bármilyen egész szám lehet. A negatív disp értékek jobbra tolnak el.
Bármelyik irányba tolunk el, az oldalt belépő bitek értéke 0 lesz.disp abszolútértéke nagyobb, mint 31,
akkor az eredmény biztosan 0 lesz.disp értékekre fennáll az alábbi összefüggés:
assert(bit32.lshift(b, disp) == (b * 2^disp) % 2^32)
x-et disp bittel jobbra elforgatva. A disp
értéke bármilyen egész szám lehet. Bármely elforgatásra igaz az alábbi összefüggés:
assert(bit32.rrotate(x, disp) == bit32.rrotate(x, disp % 32))disp értékek balra forgatnak.
x-et disp bittel jobbra eltolva. A disp
értéke bármilyen egész szám lehet. A negatív disp értékek balra tolnak el.
Bármelyik irányba tolunk el, az oldalt belépő bitek értéke 0 lesz.disp abszolútértéke nagyobb, mint 31,
akkor az eredmény biztosan 0 lesz.disp értékekre fennáll az alábbi összefüggés:
assert(bit32.rshift(b, disp) == math.floor(b % 2^32 / 2^disp))
A Lua nyelvben a fájlok elérésére kétféle megoldás létezik: ezek az implicit és explicit fájlleírók használata.
A két mód között az a különbség, hogy míg az implicit fájlleírókat az
io osztálybeli függvények segítségével kezelhetjük, addig
az explicit fájlleírót az io.open függvénytől megkapva
azt lényegében objektumszerűen használhatjuk, a fájlműveleteket
a leíró metódusain keresztül érhetjük el.
Ugyancsak az io tábla tartalmazza az előre definiált
io.stdin, io.stdout és io.stderr leírókat.
Ahol nem jelezzük, a függvények nilt adnak vissza, sikertelen művelet esetén, és niltől eltérő értéket, ha a művelet sikerrel zárult.
file:close metódushívással. Paraméter nélkül
az alapértelmezett fájlt zárja le.
file:flush hívással.
Megnyitja a megadott fájlt olvasásra, és visszaad egy iterátorfüggvényt,
amely minden hívásakor egy újabb sort ad a fájlból. Így a
Az io.lines() egyenértékű az io.input():lines() hívással,
tehát az alapértelmezett input fájlon dolgozik.
Megnyit egy fájlt, a megadott elérési móddal. Fájl handle-t ad vissza, vagy (hiba esetén) nilt.
A mode string lehetséges értékei:
mode string végén állhat egy b betű,
amely egyes rendszereken a bináris módhoz szükséges. Az itt megadott
string egyébként egy az egyben átadódik az fopen
standard C függvénynek.
io.input, de az alapértelmezett
kimeneti fájlra vonatkozik.
io.input():read paranccsal.
obj file handle-e.
Ha igen, visszatérési értéke a "file" string megnyitott, és
a "closed file" string már lezárt file handle esetén,
egyébként nil.
io.output():write paranccsal.
file fájlt.
file-ban történt módosítás kiírása.
io.lines-tól, hogy már megnyitott fájllal dolgozik, és azt
a ciklus végén sem zárja le.
Beállítja és lekérdezi a fájlmutató pozícióját. A megadott értéket a fájl elejétől számítja,
értéke az offset plusz a szövegesen megadott alappozíció:
Az alapértelmezett értékek rendre "cur" és 0. Így paraméter nélkül hívva a
file:seek-et mindössze az aktuális pozíciót kérdezi le, míg a
file:seek("set") a fájl elejére lép (és nullát ad), továbbá
file:seek("end") a fájl végére lép, és visszaadja a fájl méretét.
file handle-re. A paraméterek számok vagy stringek
kell legyenek,
egyéb értékeket konvertálni kell a tostring vagy string.format
eljárással.
Ez gyakorlatilag egy felület a C-beli math
könyvtárhoz. Minden függvény a math táblából
érhető el, többnyire az eredetivel megegyező néven. Emellett
ez tartalmazza a hatványozást végző bináris ^ operátort
megvalósító globális __pow függvényt. A könyvtár által
biztosított függvények:
math.pi változó. Minden trigonometrikus
függvény radiánban dolgozik (a régi Lua verziók fokban számoltak!).
A két mértékegység között a math.deg és math.rad
függvényekkel számíthatunk át.
A math.min és math.max függvények
a legalább 1 paraméterük közül a legkisebbet illetve a legnagyobbat adják
vissza.
A math.random és math.randomseed függvények
az ANSI C által definiált egyszerű véletlenszám-generátorhoz biztosítanak
felületet. Paraméter nélkül hívva a math.random a
[0,1) intervallumból ad vissza egy álvéletlenszámot. Egy n
paraméterrel az [1,n], két argumentummal pedig az első és a második
paraméter közötti intervallum egy elemét adja.
A math.randomseed függvény az álvéletlenszám-generálás
"magját" adja meg. Azonos magból indítva a generátort azonos
"véletlen" számsorozatot kapunk.
Lua-nak nincs beépített debugger eszköze. Helyette, egy különleges interfészt kínál függvények és hook-ok segítségével. Ez az interfész lehetővé teszi a különböző típusú debugger-ek, profile-erek és egyék eszközök megalkotását, amelyeknek az interpreter belső információira van szükségük.
lua_Debug
Egy struktúra, amely egy függvény vagy egy aktivációs rekord különböző információ darabjainak a tárolására használatos. lua_getstack csak a privát részét tölti ki ennek a struktúrának. A lua_Debug többi részének kitöltéséhez a lua_getinfo-t kell meghívni (jelentésük ld. lentebb).
lua_Debug tagjainak a jelentése:
lua_gethook
Visszaadja az aktuális hook függvényt.
lua_gethookcount
Visszaadja az aktuális hook számot.
lua_gethookmask
Visszaadja az aktuális hook maszkot.
lua_getinfo
Egy adott függvényről vagy függvényhívásról ad információt. Ahhoz, hogy egy függvény hívásról szerezzünk információt, az ar paraméternek egy valós aktivációs rekordnak kell lennie, amely egy korábbi hívás által lett kitöltve a lua_getstack-nek vagy egy hook-nak lett argumentumként megadva. Ahhoz, hogy egy olyan függvényről szerezzünk információt, a veremre kell rátolni és what string-et '>'-el kell kezdeni. (Ebben az esetben a lua_getinfo kiszedi a verem tetején lévő függvényt.) Például, ahhoz, hogy megtudjuk melyik sorban lett definiálva egy f függvény, a következő kódot írhatjuk:
Minden karakter a what string-ben választ néhány tagot az ar struktúrából, hogy kitöltésre kerüljön vagy egy értéket, hogy beszúrásra kerüljön a verembe: 'n': a name és namewhat tagokat tölti ki; 's': a source, short_src, linedefined, lastlinedefined, és what tagokat tölti ki; 'l': a currentline tagot tölti ki; 't': az istailcall tagot tölti ki; 'u': a nups, nparams és isvararg tagokat tölti ki; 'f': beszúrja a verembe azt a függvényt ami a megadott szinten fut; 'L': beszúr a verembe egy táblát, amelynek az indexei a sorok számai, amelyek érvényesek a függvénynél. (Egy érvényes sor egy sor és a hozzá tartozó kód, amely egy sor, ahova a break point-ot tehetjük. Nem valid sorok az üres sorok vagy a kommentek.)
Ez a függvény 0-val tér vissza hiba esetén (például hibás opció esetén a what-ban).
lua_getlocal
Információt ad vissza egy adott aktivációs rekord vagy függvény lokális változójáról. Az első esetben az ar paraméternek egy valid aktivációs rekordnak kell lennie amely egy korábbi hívás által lett kitöltve a lua_getstack miatt vagy egy hook-nak lett átadva argumentumként. Az n index választja ki, hogy melyik lokális változó legyen vizsgálva; változó indexekről és nevekről több információ itt található: http://www.lua.org/manual/5.2/manual.html#pdf-debug.getlocal A lua_getlocal beteszi a verembe a változó értékét és visszaadja a nevét. A második esetben, ar-nek NULL-nak kell lennie és a vizsgált függvénynek a verem tetején kell lennie. Ebben az esetben csak a Lua függvények paraméterei láthatóak (mivel nincs információ arról, hogy mely változók aktívak) és egy érték sincs a verembe szúrva. NULL-t ad vissza (és nem szúr be semmit) ha az index nagyobb mint a lokális változók száma.
lua_getstack
Információt ad vissza az interpreter futási idejű verméről.
Ez a függvény a lua_Debug struktúra részeit tölti ki egy adott szinten végrehajtódó függvény aktivációs rekordjának azonosításával. 0-ás szint a jelenleg futó függvény, míg n+1-edik szint az a függvény amely az n-edig szintet hívta (kivéve a farok hívásokat, amelyek nem a vermen számolandók). Amikor nincs hiba, lua_getstack 1-et ad vissza; ha nagyobb szinttel lett hívva mint a verem mélysége akkor 0-át ad vissza.
lua_getupvalue
Egy lezárás upvalue-járól ad vissza információt. (A Lua függvények esetében, az upvalue-k az external lokális változók amiket a függvény használ és amik következésképpen a lezártjában vannak.) lua_getupvalue visszaadja az n-edik upvalue indexét, beszúrja az upvalue értékét a verembe és visszaadja a nevét. funcindex a veremben lévő lezártra mutat.(Az upvalue-knak nincs adott sorrendjük, mert az egész függvényen át aktívak. Így tetszőleges sorrendben vannak számozva.) NULL-lal tér vissza (és nem szúr be semmit) ha az index nagyott mint az upvalue-k száma. C függvények esetében, ez a függvény az "" üres string-et használja névként az összes upvalue esetében.
lua_Hook
Típus a hook függvények hibakereséséhez. Minden alkalommal amikor egy hook meghívódik, az ar argumentumának az event tagja beállítódik arra az event-re amely a hook-ot triggerelte. Lua a következő konstansok valamelyikével azonosítja az event-eket: LUA_HOOKCALL, LUA_HOOKRET, LUA_HOOKTAILCALL, LUA_HOOKLINE, és LUA_HOOKCOUNT. Továbbá a sor event-ek esetén a currentline tag is beállítódik. Bármely más ar-ben lévő tag értékének megszerzéséhez a hook-nak lua_getinfo parancsot kell hívnia. Hívás eseményeknél az event lehet LUA_HOOKCALL, a normál érték, vagy LUA_HOOKTAILCALL egy farok hívás esetén; ebben az esetben nem lesz megfelelő visszatérési esemény. Amíg a Lua egy hook-ot futtat addig megakadályoz minden további hívást a hook-októl. Ezáltal, ha egy hook visszahív Lua-ban, hogy végrehajtson egy függvényt vagy egy blokkot, akkor ez minden hívás hook-olása nélkül fog végrehajtódni. A hook függvényeknek nem lehetnek folytatásaik, azaz, nem hívhatnak lua_yieldk, lua_pcallk vagy lua_callk függvényeket egy nem null k-val. (linkek a függvények leírásáról: http://www.lua.org/manual/5.2/manual.html#lua_yieldk, http://www.lua.org/manual/5.2/manual.html#lua_pcallk, http://www.lua.org/manual/5.2/manual.html#lua_callk)
lua_sethook
Beállítja a hibakereső hook függvényt. Az f argumentum a hook függvény. mask jelöli, hogy melyik eseményeken lesz a hook meghívva: bitenként vagyolt értéke a LUA_MASKCALL, LUA_MASKRET, LUA_MASKLINE, és LUA_MASKCOUNT konstansok valamelyikének. A count argumentumnak csak akkor van jelentősége ha a mask tartalmazza a LUA_MASKCOUNT maszkot. Minden eseményre, amelyre a hook meg van hívva a következőképpen van magyarázva: A hívás hook: akkor hívódik amikor az interpreter meghív egy függvényt. Akkor hívódik a hook amikor Lua belép az új függvénybe, mielőtt a függvény megkapja az argumentumait. A visszatérési hook: akkor hívódik amikor az interpreter visszatér egy függvényből. Akkor hívódik a hook mielőtt Lua kilép a függvényből. Nincs hagyományos módja a függvény által visszaadott értékek hozzáféréséhez. A sor hook: akkor hívódik amikor az interpreter éppen egy új sor kódját készül végrehajtani, vagy amikor visszaugrik a kódhoz (ugyanahhoz a sorhoz). (Ez az esemény csak addig történik amíg a Lua végrehajt egy függvényt.) A számolás hook: akkor hívódik amikor az interpreter végrehajtja az összes count parancsot. (Ez az esemény csak addig történik amíg a Lua végrehajt egy függvényt.) A hook-ot a mask zero-ra állításával lehet kikapcsolni.
lua_setlocal
Beállítja egy megadott aktivációs rekord lokális változójának az értékét. Az ar és n paraméterek ugyanazok mint lua_getlocal-ban. lua_setlocal beállítja a verem tetején lévő értéket a változóra és visszaadja a nevét. Valamint kiszedi a verem tetején lévő értéket. NULL-al tér vissza (és nem szed ki semmit) amikor az index nagyobb mint az aktív lokális változók száma.
lua_setupvalue
Beállítja egy lezárt upvalue-jának az értékét. Beállítja a verem tetejét az upvalue értékére és visszaadja a nevét. Továbbá ki is szedi az értéket a veremből. funcindex és n paraméterek ugyanazok mint a lua_getupvalue esetén. NULL-al tér vissza (és nem szed ki semmit) amikor az index nagyobb mint az upvalue-k száma.
lua_upvalueid
Visszadja a funcindex indexen lévő lezárt n-edik számú upvalue-jának egyedi azonosítóját. A funcindex és n paraméterek ugyanazok mint a lua_getupvalue esetén. (de n nem lehet nagyobb mint az upvalue-k száma). Ezek az egyedi azonosítók lehetővé teszik egy program számára, hogy megállapítsa, hogy a különböző lezártak megosztanak e upvalue-kat. Lua lezártak amelyek megosztanak egy upvalue-t, azonos id-t adnak vissza az upvalue indexek esetén.
lua_upvaluejoin
A funcindex1-en lévő Lua lezárt n1 indexű upvalue-ját referálja a funcindex2-őn lévő Lua lezárt n2 indexű upvalue-jához.
Ezt a könyvtárt a Lua programok debuggolására hozták létre. Az itt található függvények kizárólagosan debuggolásra és az ilyesfajta műveletekre (profiling) jöttek létre. Tartózkodjunk minden másfajta alkalmazástól, nagyon lassúak lehetnek.
Minden a könyvtárhoz tartozó függvényt a debug tábla tartalmaz. Minden szálakhoz kapcsolódó
függvénynek van egy első paramétere, ami a szálat jelképezi. Az alapértelmezett mindig az aktuális thread.
function-re vonatkozóan. Ezt a függvényt
meg lehet adni direkt módon, vagy adhatunk helyette egy számot.
getinfo itselfgetinfo
A what paraméterrel mondhatjuk meg, hogy mely információkra van szükségünk. Alapértelmezésben
az összes információ bekerül a táblába. Például:
print függvényről.
object paraméter metatáblájával, ha nincs neki, akkor nillel
object metatábláját a table paraméterben adott táblára, ami lehet
nil is.
Az Operating System könyvtár azon könyvtári funkciókat, melyek fájl manipulációra, az aktuális dátumot és időt lekérdező függvényeket, és minden egyéb operációs rendszerhez kapcsolódó műveletet tartalmazza. A műveleteket az os táblázat tartalmazza. Ez a könyvtár felelős a LUA hordozhatóságáért is. Mivel a Lua ANSI C-ben íródott, a rendszer csak azon funkciókkal rendelkezik amenyeket az ANSI szabvány megkövetel. Sok OS létesítmény, mint például a könyvtár manipulációk, vagy socketek nem része az alap Operating System könyvtárnak, hanem más könyvtárakban vannak megvalósítva akkor is, ha logikailag ebben a könyvtárban lenne helyük. Ilyen a posix könyvtár is, mely támogatja a POSIX.1 standardjait a LUA - ban,továbbá megemlíthetjük még a luasocket könyvtárat, mely a hálózati kommunikációért felelős.
Fájl manipuláció téren, a könyvtárban implementálva vannak olyan függvények, mint a os.rename, amellyel átnevezhetünk fileket, vagy mint az os.remove.
Két függvény van implementálva, amivel lekérdezhető az összes dátummal, idővel kapcsolatos információ. Ezek:
os.time függvény paraméter nélküli meghívásakor a függvény visszatérési értéke egy szám ami az aktuális időt adja vissza másodpercekben. Amikor paraméteresen hívjuk meg, akkor megadja másodpercekben az álltalunk paraméterben megadott dátumot.
hour paraméter érték alapértelmezetten 12, a min 00, és a sec 00.
os.date függvény a nevének ellenére az os.time függvény ellentetje, azaz a függvény egy számból dátumot és időt állít elő. Két paraméterrel lehet meghívni. Az első paraméterben adjuk meg a dátum formátumát, hogy milyen értéket szeretnénk kapni. A második egy szám, ami lényegében a másodpercekben megadott idő.
Ha táblázatban szeretnénk megkapni az eredményt, akkor "*t" az első paraméter :
os.date függvény első paramétere mi lehet:
%c, és ennek megfelelően írja ki az eredményt. A %x, %X, és %c paraméterrel való meghívás során figyelembe veszi a rendszer beállításait és ennek megfelelő alakja lesz a visszatérési értéknek. Ezzel vigyázni kell, ezért ajánlott saját sztring alakot megadni amit, például igy tehetünk meg : "%m/%d/%Y".
os.clock, ami megadja a CPU idejét, azaz azt az időt, ami a végrehajtáshoz szükséges.
Nézzünk egy példát a használatára!