| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
- <html>
- <head>
- <TITLE>Lua: 5.0 reference manual</TITLE>
- <LINK REL="stylesheet" TYPE="text/css" HREF="../Medias/lua.css">
- </head>
- <BODY>
- <hr>
- <h1>
- <A HREF="../../home.html"><IMG SRC="../Medias/logo.gif" ALT="Lua" BORDER=0></A>
- Lua 5.0 Reference Manual
- </h1>
- by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes
- <p>
- <small>
- <a HREF="http://www.lua.org/copyright.html">Copyright</a>
- © 2003 Tecgraf, PUC-Rio. All rights reserved.
- </small>
- <hr>
- <p>
- <p>
- <a name="1"><h1>1 - Introduction</h1></a>
- <p>Lua is an extension programming language designed to support
- general procedural programming with data description
- facilities.
- It also offers good support for object-oriented programming,
- functional programming, and data-driven programming.
- Lua is intended to be used as a powerful, light-weight
- configuration language for any program that needs one.
- Lua is implemented as a library, written in <em>clean</em> C
- (that is, in the common subset of ANSI C and C++).
- <p>Being an extension language, Lua has no notion of a "main" program:
- it only works <em>embedded</em> in a host client,
- called the <em>embedding program</em> or simply the <em>host</em>.
- This host program can invoke functions to execute a piece of Lua code,
- can write and read Lua variables,
- and can register C functions to be called by Lua code.
- Through the use of C functions, Lua can be augmented to cope with
- a wide range of different domains,
- thus creating customized programming languages sharing a syntactical framework.
- <p>The Lua distribution includes a stand-alone embedding program,
- <code>lua</code>, that uses the Lua library to offer a complete Lua interpreter.
- <p>Lua is free software,
- and is provided as usual with no guarantees,
- as stated in its copyright notice.
- The implementation described in this manual is available
- at Lua's official web site, <code>www.lua.org</code>.
- <p>Like any other reference manual,
- this document is dry in places.
- For a discussion of the decisions behind the design of Lua,
- see the papers below,
- which are available at Lua's web site.
- <ul>
- <li>
- R. Ierusalimschy, L. H. de Figueiredo, and W. Celes.
- Lua---an extensible extension language.
- <em>Software: Practice & Experience</em> <b>26</b> #6 (1996) 635-652.
- <li>
- L. H. de Figueiredo, R. Ierusalimschy, and W. Celes.
- The design and implementation of a language for extending applications.
- <em>Proceedings of XXI Brazilian Seminar on Software and Hardware</em> (1994) 273-283.
- <li>
- L. H. de Figueiredo, R. Ierusalimschy, and W. Celes.
- Lua: an extensible embedded language.
- <em>Dr. Dobb's Journal</em> <b>21</b> #12 (Dec 1996) 26-33.
- <li>
- R. Ierusalimschy, L. H. de Figueiredo, and W. Celes.
- The evolution of an extension language: a history of Lua,
- <em>Proceedings of V Brazilian Symposium on Programming Languages</em> (2001) B-14-B-28.
- </ul>
- <p>Lua means "moon" in Portuguese and is pronounced LOO-ah.
- <p>
- <a name="language"><a name="2"><h1>2 - The Language</h1></a></a>
- <p>This section describes the lexis, the syntax, and the semantics of Lua.
- In other words,
- this section describes
- which tokens are valid,
- how they can be combined,
- and what their combinations mean.
- <p>The language constructs will be explained using the usual extended BNF,
- in which
- {<em>a</em>} means 0 or more <em>a</em>'s, and
- [<em>a</em>] means an optional <em>a</em>.
- Non-terminals are shown in <em>italics</em>,
- keywords are shown in <b>bold</b>,
- and other terminal symbols are shown in <code>typewriter</code> font,
- enclosed in single quotes.
- <p><a name="lexical"><a name="2.1"><h2>2.1 - Lexical Conventions</h2></a></a>
- <p><em>Identifiers</em> in Lua can be any string of letters,
- digits, and underscores,
- not beginning with a digit.
- This coincides with the definition of identifiers in most languages.
- (The definition of letter depends on the current locale:
- any character considered alphabetic by the current locale
- can be used in an identifier.)
- <p>The following <em>keywords</em> are reserved
- and cannot be used as identifiers:
- <PRE>
- and break do else elseif
- end false for function if
- in local nil not or
- repeat return then true until while
- </PRE>
- <p>Lua is a case-sensitive language:
- <code>and</code> is a reserved word, but <code>And</code> and <code>AND</code>
- are two different, valid identifiers.
- As a convention, identifiers starting with an underscore followed by
- uppercase letters (such as <code>_VERSION</code>)
- are reserved for internal variables used by Lua.
- <p>The following strings denote other tokens:
- <PRE>
- + - * / ^ =
- ~= <= >= < > ==
- ( ) { } [ ]
- ; : , . .. ...
- </PRE>
- <p><em>Literal strings</em>
- can be delimited by matching single or double quotes,
- and can contain the following C-like escape sequences:
- <ul>
- <li><b><code>\a</code></b> --- bell
- <li><b><code>\b</code></b> --- backspace
- <li><b><code>\f</code></b> --- form feed
- <li><b><code>\n</code></b> --- newline
- <li><b><code>\r</code></b> --- carriage return
- <li><b><code>\t</code></b> --- horizontal tab
- <li><b><code>\v</code></b> --- vertical tab
- <li><b><code>\\</code></b> --- backslash
- <li><b><code>\"</code></b> --- quotation mark
- <li><b><code>\'</code></b> --- apostrophe
- <li><b><code>\[</code></b> --- left square bracket
- <li><b><code>\]</code></b> --- right square bracket
- </ul>
- Moreover, a `<code>\</code><em>newline</em>´
- (that is, a backslash followed by a real newline)
- results in a newline in the string.
- A character in a string may also be specified by its numerical value
- using the escape sequence `<code>\</code><em>ddd</em>´,
- where <em>ddd</em> is a sequence of up to three decimal digits.
- Strings in Lua may contain any 8-bit value, including embedded zeros,
- which can be specified as `<code>\0</code>´.
- <p>Literal strings can also be delimited by matching double square brackets
- <code>[[</code> · · · <code>]]</code>.
- Literals in this bracketed form may run for several lines,
- may contain nested <code>[[</code> · · · <code>]]</code> pairs,
- and do not interpret any escape sequences.
- For convenience,
- when the opening `<code>[[</code>´ is immediately followed by a newline,
- the newline is not included in the string.
- As an example, in a system using ASCII
- (in which `<code>a</code>´ is coded as 97,
- newline is coded as 10, and `<code>1</code>´ is coded as 49),
- the four literals below denote the same string:
- <PRE>
- (1) "alo\n123\""
- (2) '\97lo\10\04923"'
- (3) [[alo
- 123"]]
- (4) [[
- alo
- 123"]]
- </PRE>
- <p><em>Numerical constants</em> may be written with an optional decimal part
- and an optional decimal exponent.
- Examples of valid numerical constants are
- <PRE>
- 3 3.0 3.1416 314.16e-2 0.31416E1
- </PRE>
- <p><em>Comments</em> start anywhere outside a string with a
- double hyphen (<code>--</code>).
- If the text immediately after <code>--</code> is different from <code>[[</code>,
- the comment is a <em>short comment</em>,
- which runs until the end of the line.
- Otherwise, it is a <em>long comment</em>,
- which runs until the corresponding <code>]]</code>.
- Long comments may run for several lines
- and may contain nested <code>[[</code> · · · <code>]]</code> pairs.
- <p>For convenience,
- the first line of a chunk is skipped if it starts with <code>#</code>.
- This facility allows the use of Lua as a script interpreter
- in Unix systems (see <a href="#lua-sa">6</a>).
- <p><a name="TypesSec"><a name="2.2"><h2>2.2 - Values and Types</h2></a></a>
- <p>Lua is a <em>dynamically typed language</em>.
- That means that
- variables do not have types; only values do.
- There are no type definitions in the language.
- All values carry their own type.
- <p>There are eight basic types in Lua:
- <em>nil</em>, <em>boolean</em>, <em>number</em>,
- <em>string</em>, <em>function</em>, <em>userdata</em>, <em>thread</em>, and <em>table</em>.
- <em>Nil</em> is the type of the value <B>nil</B>,
- whose main property is to be different from any other value;
- usually it represents the absence of a useful value.
- <em>Boolean</em> is the type of the values <B>false</B> and <B>true</B>.
- In Lua, both <B>nil</B> and <B>false</B> make a condition false;
- any other value makes it true.
- <em>Number</em> represents real (double-precision floating-point) numbers.
- (It is easy to build Lua interpreters that use other
- internal representations for numbers,
- such as single-precision float or long integers.)
- <em>String</em> represents arrays of characters.
- Lua is 8-bit clean:
- Strings may contain any 8-bit character,
- including embedded zeros (<code>'\0'</code>) (see <a href="#lexical">2.1</a>).
- <p>Functions are <em>first-class values</em> in Lua.
- That means that functions can be stored in variables,
- passed as arguments to other functions, and returned as results.
- Lua can call (and manipulate) functions written in Lua and
- functions written in C
- (see <a href="#functioncall">2.5.7</a>).
- <p>The type <em>userdata</em> is provided to allow arbitrary C data to
- be stored in Lua variables.
- This type corresponds to a block of raw memory
- and has no pre-defined operations in Lua,
- except assignment and identity test.
- However, by using <em>metatables</em>,
- the programmer can define operations for userdata values
- (see <a href="#metatable">2.8</a>).
- Userdata values cannot be created or modified in Lua,
- only through the C API.
- This guarantees the integrity of data owned by the host program.
- <p>The type <em>thread</em> represents independent threads of execution
- and it is used to implement coroutines.
- <p>The type <em>table</em> implements associative arrays,
- that is, arrays that can be indexed not only with numbers,
- but with any value (except <B>nil</B>).
- Moreover,
- tables can be <em>heterogeneous</em>,
- that is, they can contain values of all types (except <B>nil</B>).
- Tables are the sole data structuring mechanism in Lua;
- they may be used to represent ordinary arrays,
- symbol tables, sets, records, graphs, trees, etc.
- To represent records, Lua uses the field name as an index.
- The language supports this representation by
- providing <code>a.name</code> as syntactic sugar for <code>a["name"]</code>.
- There are several convenient ways to create tables in Lua
- (see <a href="#tableconstructor">2.5.6</a>).
- <p>Like indices,
- the value of a table field can be of any type (except <B>nil</B>).
- In particular,
- because functions are first class values,
- table fields may contain functions.
- Thus tables may also carry <em>methods</em> (see <a href="#func-def">2.5.8</a>).
- <p>Tables, functions, and userdata values are <em>objects</em>:
- variables do not actually <em>contain</em> these values,
- only <em>references</em> to them.
- Assignment, parameter passing, and function returns
- always manipulate references to such values;
- these operations do not imply any kind of copy.
- <p>The library function <code>type</code> returns a string describing the type
- of a given value (see <a href="#pdf-type">5.1</a>).
- <p><a name="coercion"><a name="2.2.1"><h3>2.2.1 - Coercion</h3></a></a>
- <p>Lua provides automatic conversion between
- string and number values at run time.
- Any arithmetic operation applied to a string tries to convert
- that string to a number, following the usual rules.
- Conversely, whenever a number is used where a string is expected,
- the number is converted to a string, in a reasonable format.
- For complete control of how numbers are converted to strings,
- use the <code>format</code> function from the string library (see <a href="#format">5.3</a>).
- <p><a name="variables"><a name="2.3"><h2>2.3 - Variables</h2></a></a>
- <p>Variables are places that store values.
- There are three kinds of variables in Lua:
- global variables, local variables, and table fields.
- <p>A single name can denote a global variable or a local variable
- (or a formal parameter of a function,
- which is a particular form of local variable):
- <pre>
- var ::= Name
- </pre>
- Variables are assumed to be global unless explicitly declared local
- (see <a href="#localvar">2.4.7</a>).
- Local variables are <em>lexically scoped</em>:
- Local variables can be freely accessed by functions
- defined inside their scope (see <a href="#visibility">2.6</a>).
- <p>Before the first assignment to a variable, its value is <B>nil</B>.
- <p>Square brackets are used to index a table:
- <pre>
- var ::= prefixexp `<b>[</b>´ exp `<b>]</b>´
- </pre>
- The first expression (<em>prefixexp</em>)should result in a table value;
- the second expression (<em>exp</em>)
- identifies a specific entry inside that table.
- The expression denoting the table to be indexed has a restricted syntax;
- see <a href="#expressions">2.5</a> for details.
- <p>The syntax <code>var.NAME</code> is just syntactic sugar for
- <code>var["NAME"]</code>:
- <pre>
- var ::= prefixexp `<b>.</b>´ Name
- </pre>
- <p>The meaning of accesses to global variables
- and table fields can be changed via metatables.
- An access to an indexed variable <code>t[i]</code> is equivalent to
- a call <code>gettable_event(t,i)</code>.
- (See <a href="#metatable">2.8</a> for a complete description of the
- <code>gettable_event</code> function.
- This function is not defined or callable in Lua.
- We use it here only for explanatory purposes.)
- <p>All global variables live as fields in ordinary Lua tables,
- called <em>environment tables</em> or simply <em>environments</em>.
- Functions written in C and exported to Lua (<em>C functions</em>)
- all share a common <em>global environment</em>.
- Each function written in Lua (a <em>Lua function</em>)
- has its own reference to an environment,
- so that all global variables in that function
- will refer to that environment table.
- When a function is created,
- it inherits the environment from the function that created it.
- To change or get the environment table of a Lua function,
- you call <code>setfenv</code> or <code>getfenv</code> (see <a href="#setfenv">5.1</a>).
- <p>An access to a global variable <code>x</code>
- is equivalent to <code>_env.x</code>,
- which in turn is equivalent to
- <PRE>
- gettable_event(_env, "x")
- </PRE>
- where <code>_env</code> is the environment of the running function.
- (The <code>_env</code> variable is not defined in Lua.
- We use it here only for explanatory purposes.)
- <p><a name="stats"><a name="2.4"><h2>2.4 - Statements</h2></a></a>
- <p>Lua supports an almost conventional set of statements,
- similar to those in Pascal or C.
- This set includes
- assignment, control structures, procedure calls,
- table constructors, and variable declarations.
- <p><a name="chunks"><a name="2.4.1"><h3>2.4.1 - Chunks</h3></a></a>
- <p>The unit of execution of Lua is called a <em>chunk</em>.
- A chunk is simply a sequence of statements,
- which are executed sequentially.
- Each statement can be optionally followed by a semicolon:
- <pre>
- chunk ::= {stat [`<b>;</b>´]}
- </pre>
- <p>Lua handles a chunk as the body of an anonymous function (see <a href="#func-def">2.5.8</a>).
- As such, chunks can define local variables and return values.
- <p>A chunk may be stored in a file or in a string inside the host program.
- When a chunk is executed, first it is pre-compiled into opcodes for
- a virtual machine,
- and then the compiled code is executed
- by an interpreter for the virtual machine.
- <p>Chunks may also be pre-compiled into binary form;
- see program <code>luac</code> for details.
- Programs in source and compiled forms are interchangeable;
- Lua automatically detects the file type and acts accordingly.
- <p><a name="2.4.2"><h3>2.4.2 - Blocks</h3></a>
- A block is a list of statements;
- syntactically, a block is equal to a chunk:
- <pre>
- block ::= chunk
- </pre>
- <p>A block may be explicitly delimited to produce a single statement:
- <pre>
- stat ::= <b>do</b> block <b>end</b>
- </pre>
- Explicit blocks are useful
- to control the scope of variable declarations.
- Explicit blocks are also sometimes used to
- add a <b>return</b> or <b>break</b> statement in the middle
- of another block (see <a href="#control">2.4.4</a>).
- <p><a name="assignment"><a name="2.4.3"><h3>2.4.3 - Assignment</h3></a></a>
- <p>Lua allows multiple assignment.
- Therefore, the syntax for assignment
- defines a list of variables on the left side
- and a list of expressions on the right side.
- The elements in both lists are separated by commas:
- <pre>
- stat ::= varlist1 `<b>=</b>´ explist1
- varlist1 ::= var {`<b>,</b>´ var}
- explist1 ::= exp {`<b>,</b>´ exp}
- </pre>
- Expressions are discussed in <a href="#expressions">2.5</a>.
- <p>Before the assignment,
- the list of values is <em>adjusted</em> to the length of
- the list of variables.
- If there are more values than needed,
- the excess values are thrown away.
- If there are fewer values than needed,
- the list is extended with as many <B>nil</B>'s as needed.
- If the list of expressions ends with a function call,
- then all values returned by that function call enter in the list of values,
- before the adjustment
- (except when the call is enclosed in parentheses; see <a href="#expressions">2.5</a>).
- <p>The assignment statement first evaluates all its expressions
- and only then are the assignments performed.
- Thus the code
- <PRE>
- i = 3
- i, a[i] = i+1, 20
- </PRE>
- sets <code>a[3]</code> to 20, without affecting <code>a[4]</code>
- because the <code>i</code> in <code>a[i]</code> is evaluated (to 3)
- before it is assigned 4.
- Similarly, the line
- <PRE>
- x, y = y, x
- </PRE>
- exchanges the values of <code>x</code> and <code>y</code>.
- <p>The meaning of assignments to global variables
- and table fields can be changed via metatables.
- An assignment to an indexed variable <code>t[i] = val</code> is equivalent to
- <code>settable_event(t,i,val)</code>.
- (See <a href="#metatable">2.8</a> for a complete description of the
- <code>settable_event</code> function.
- This function is not defined or callable in Lua.
- We use it here only for explanatory purposes.)
- <p>An assignment to a global variable <code>x = val</code>
- is equivalent to the assignment
- <code>_env.x = val</code>,
- which in turn is equivalent to
- <PRE>
- settable_event(_env, "x", val)
- </PRE>
- where <code>_env</code> is the environment of the running function.
- (The <code>_env</code> variable is not defined in Lua.
- We use it here only for explanatory purposes.)
- <p><a name="control"><a name="2.4.4"><h3>2.4.4 - Control Structures</h3></a></a>
- The control structures
- <b>if</b>, <b>while</b>, and <b>repeat</b> have the usual meaning and
- familiar syntax:
- <pre>
- stat ::= <b>while</b> exp <b>do</b> block <b>end</b>
- stat ::= <b>repeat</b> block <b>until</b> exp
- stat ::= <b>if</b> exp <b>then</b> block {<b>elseif</b> exp <b>then</b> block} [<b>else</b> block] <b>end</b>
- </pre>
- Lua also has a <b>for</b> statement, in two flavors (see <a href="#for">2.4.5</a>).
- <p>The condition expression <em>exp</em> of a
- control structure may return any value.
- Both <B>false</B> and <B>nil</B> are considered false.
- All values different from <B>nil</B> and <B>false</B> are considered true
- (in particular, the number 0 and the empty string are also true).
- <p>The <b>return</b> statement is used to return values
- from a function or from a chunk.
- Functions and chunks may return more than one value,
- so the syntax for the <b>return</b> statement is
- <pre>
- stat ::= <b>return</b> [explist1]
- </pre>
- <p>The <b>break</b> statement can be used to terminate the execution of a
- <b>while</b>, <b>repeat</b>, or <b>for</b> loop,
- skipping to the next statement after the loop:
- <pre>
- stat ::= <b>break</b>
- </pre>
- A <b>break</b> ends the innermost enclosing loop.
- <p>For syntactic reasons, <b>return</b> and <b>break</b>
- statements can only be written as the <em>last</em> statement of a block.
- If it is really necessary to <b>return</b> or <b>break</b> in the
- middle of a block,
- then an explicit inner block can be used,
- as in the idioms
- `<code>do return end</code>´ and
- `<code>do break end</code>´,
- because now <b>return</b> and <b>break</b> are the last statements in
- their (inner) blocks.
- In practice,
- those idioms are only used during debugging.
- <p><a name="for"><a name="2.4.5"><h3>2.4.5 - For Statement</h3></a></a>
- <p>The <b>for</b> statement has two forms:
- one numeric and one generic.
- <p>The numeric <b>for</b> loop repeats a block of code while a
- control variable runs through an arithmetic progression.
- It has the following syntax:
- <pre>
- stat ::= <b>for</b> Name `<b>=</b>´ exp `<b>,</b>´ exp [`<b>,</b>´ exp] <b>do</b> block <b>end</b>
- </pre>
- The <em>block</em> is repeated for <em>name</em> starting at the value of
- the first <em>exp</em>, until it passes the second <em>exp</em> by steps of the
- third <em>exp</em>.
- More precisely, a <b>for</b> statement like
- <PRE>
- for var = e1, e2, e3 do block end
- </PRE>
- is equivalent to the code:
- <PRE>
- do
- local var, _limit, _step = tonumber(e1), tonumber(e2), tonumber(e3)
- if not (var and _limit and _step) then error() end
- while (_step>0 and var<=_limit) or (_step<=0 and var>=_limit) do
- block
- var = var + _step
- end
- end
- </PRE>
- Note the following:
- <ul>
- <li> All three control expressions are evaluated only once,
- before the loop starts.
- They must all result in numbers.
- <li> <code>_limit</code> and <code>_step</code> are invisible variables.
- The names are here for explanatory purposes only.
- <li> The behavior is <em>undefined</em> if you assign to <code>var</code> inside
- the block.
- <li> If the third expression (the step) is absent, then a step of 1 is used.
- <li> You can use <b>break</b> to exit a <b>for</b> loop.
- <li> The loop variable <code>var</code> is local to the statement;
- you cannot use its value after the <b>for</b> ends or is broken.
- If you need the value of the loop variable <code>var</code>,
- then assign it to another variable before breaking or exiting the loop.
- </ul>
- <p>The generic <b>for</b> statement works over functions,
- called <em>iterators</em>.
- For each iteration, it calls its iterator function to produce a new value,
- stopping when the new value is <B>nil</B>.
- The generic <b>for</b> loop has the following syntax:
- <pre>
- stat ::= <b>for</b> Name {`<b>,</b>´ Name} <b>in</b> explist1 <b>do</b> block <b>end</b>
- </pre>
- A <b>for</b> statement like
- <PRE>
- for var_1, ..., var_n in explist do block end
- </PRE>
- is equivalent to the code:
- <PRE>
- do
- local _f, _s, var_1 = explist
- local var_2, ... , var_n
- while true do
- var_1, ..., var_n = _f(_s, var_1)
- if var_1 == nil then break end
- block
- end
- end
- </PRE>
- Note the following:
- <ul>
- <li> <code>explist</code> is evaluated only once.
- Its results are an <em>iterator</em> function,
- a <em>state</em>, and an initial value for the first <em>iterator variable</em>.
- <li> <code>_f</code> and <code>_s</code> are invisible variables.
- The names are here for explanatory purposes only.
- <li> The behavior is <em>undefined</em> if you assign to
- <code>var_1</code> inside the block.
- <li> You can use <b>break</b> to exit a <b>for</b> loop.
- <li> The loop variables <code>var_i</code> are local to the statement;
- you cannot use their values after the <b>for</b> ends.
- If you need these values,
- then assign them to other variables before breaking or exiting the loop.
- </ul>
- <p><a name="funcstat"><a name="2.4.6"><h3>2.4.6 - Function Calls as Statements</h3></a></a>
- To allow possible side-effects,
- function calls can be executed as statements:
- <pre>
- stat ::= functioncall
- </pre>
- In this case, all returned values are thrown away.
- Function calls are explained in <a href="#functioncall">2.5.7</a>.
- <p><a name="localvar"><a name="2.4.7"><h3>2.4.7 - Local Declarations</h3></a></a>
- Local variables may be declared anywhere inside a block.
- The declaration may include an initial assignment:
- <pre>
- stat ::= <b>local</b> namelist [`<b>=</b>´ explist1]
- namelist ::= Name {`<b>,</b>´ Name}
- </pre>
- If present, an initial assignment has the same semantics
- of a multiple assignment (see <a href="#assignment">2.4.3</a>).
- Otherwise, all variables are initialized with <B>nil</B>.
- <p>A chunk is also a block (see <a href="#chunks">2.4.1</a>),
- so local variables can be declared in a chunk outside any explicit block.
- Such local variables die when the chunk ends.
- <p>The visibility rules for local variables are explained in <a href="#visibility">2.6</a>.
- <p><a name="expressions"><a name="2.5"><h2>2.5 - Expressions</h2></a></a>
- <p>
- The basic expressions in Lua are the following:
- <pre>
- exp ::= prefixexp
- exp ::= <b>nil</b> | <b>false</b> | <b>true</b>
- exp ::= Number
- exp ::= Literal
- exp ::= function
- exp ::= tableconstructor
- prefixexp ::= var | functioncall | `<b>(</b>´ exp `<b>)</b>´
- </pre>
- <p>Numbers and literal strings are explained in <a href="#lexical">2.1</a>;
- variables are explained in <a href="#variables">2.3</a>;
- function definitions are explained in <a href="#func-def">2.5.8</a>;
- function calls are explained in <a href="#functioncall">2.5.7</a>;
- table constructors are explained in <a href="#tableconstructor">2.5.6</a>.
- <p>An expression enclosed in parentheses always results in only one value.
- Thus,
- <code>(f(x,y,z))</code> is always a single value,
- even if <code>f</code> returns several values.
- (The value of <code>(f(x,y,z))</code> is the first value returned by <code>f</code>
- or <B>nil</B> if <code>f</code> does not return any values.)
- <p>Expressions can also be built with arithmetic operators, relational operators,
- and logical operators, all of which are explained below.
- <p><a name="2.5.1"><h3>2.5.1 - Arithmetic Operators</h3></a>
- Lua supports the usual arithmetic operators:
- the binary <code>+</code> (addition),
- <code>-</code> (subtraction), <code>*</code> (multiplication),
- <code>/</code> (division), and <code>^</code> (exponentiation);
- and unary <code>-</code> (negation).
- If the operands are numbers, or strings that can be converted to
- numbers (see <a href="#coercion">2.2.1</a>),
- then all operations except exponentiation have the usual meaning.
- Exponentiation calls a global function <code>__pow</code>;
- otherwise, an appropriate metamethod is called (see <a href="#metatable">2.8</a>).
- The standard mathematical library defines function <code>__pow</code>,
- giving the expected meaning to exponentiation
- (see <a href="#mathlib">5.5</a>).
- <p><a name="rel-ops"><a name="2.5.2"><h3>2.5.2 - Relational Operators</h3></a></a>
- The relational operators in Lua are
- <PRE>
- == ~= < > <= >=
- </PRE>
- These operators always result in <B>false</B> or <B>true</B>.
- <p>Equality (<code>==</code>) first compares the type of its operands.
- If the types are different, then the result is <B>false</B>.
- Otherwise, the values of the operands are compared.
- Numbers and strings are compared in the usual way.
- Objects (tables, userdata, threads, and functions)
- are compared by <em>reference</em>:
- Two objects are considered equal only if they are the <em>same</em> object.
- Every time you create a new object (a table, userdata, or function),
- this new object is different from any previously existing object.
- <p>You can change the way that Lua compares tables and userdata
- using the "eq" metamethod (see <a href="#metatable">2.8</a>).
- <p>The conversion rules of <a href="#coercion">2.2.1</a>
- <em>do not</em> apply to equality comparisons.
- Thus, <code>"0"==0</code> evaluates to <B>false</B>,
- and <code>t[0]</code> and <code>t["0"]</code> denote different
- entries in a table.
- <p>The operator <code>~=</code> is exactly the negation of equality (<code>==</code>).
- <p>The order operators work as follows.
- If both arguments are numbers, then they are compared as such.
- Otherwise, if both arguments are strings,
- then their values are compared according to the current locale.
- Otherwise, Lua tries to call the "lt" or the "le"
- metamethod (see <a href="#metatable">2.8</a>).
- <p><a name="2.5.3"><h3>2.5.3 - Logical Operators</h3></a>
- The logical operators in Lua are
- <PRE>
- and or not
- </PRE>
- Like the control structures (see <a href="#control">2.4.4</a>),
- all logical operators consider both <B>false</B> and <B>nil</B> as false
- and anything else as true.
- <p>The operator <b>not</b> always returns <B>false</B> or <B>true</B>.
- <p>The conjunction operator <b>and</b> returns its first argument
- if this value is <B>false</B> or <B>nil</B>;
- otherwise, <b>and</b> returns its second argument.
- The disjunction operator <b>or</b> returns its first argument
- if this value is different from <B>nil</B> and <B>false</B>;
- otherwise, <b>or</b> returns its second argument.
- Both <b>and</b> and <b>or</b> use short-cut evaluation,
- that is,
- the second operand is evaluated only if necessary.
- For example,
- <PRE>
- 10 or error() -> 10
- nil or "a" -> "a"
- nil and 10 -> nil
- false and error() -> false
- false and nil -> false
- false or nil -> nil
- 10 and 20 -> 20
- </PRE>
- <p><a name="concat"><a name="2.5.4"><h3>2.5.4 - Concatenation</h3></a></a>
- The string concatenation operator in Lua is
- denoted by two dots (`<code>..</code>´).
- If both operands are strings or numbers, then they are converted to
- strings according to the rules mentioned in <a href="#coercion">2.2.1</a>.
- Otherwise, the "concat" metamethod is called (see <a href="#metatable">2.8</a>).
- <p><a name="2.5.5"><h3>2.5.5 - Precedence</h3></a>
- Operator precedence in Lua follows the table below,
- from lower to higher priority:
- <PRE>
- or
- and
- < > <= >= ~= ==
- ..
- + -
- * /
- not - (unary)
- ^
- </PRE>
- You can use parentheses to change the precedences in an expression.
- The concatenation (`<code>..</code>´) and exponentiation (`<code>^</code>´)
- operators are right associative.
- All other binary operators are left associative.
- <p><a name="tableconstructor"><a name="2.5.6"><h3>2.5.6 - Table Constructors</h3></a></a>
- Table constructors are expressions that create tables.
- Every time a constructor is evaluated, a new table is created.
- Constructors can be used to create empty tables,
- or to create a table and initialize some of its fields.
- The general syntax for constructors is
- <pre>
- tableconstructor ::= `<b>{</b>´ [fieldlist] `<b>}</b>´
- fieldlist ::= field {fieldsep field} [fieldsep]
- field ::= `<b>[</b>´ exp `<b>]</b>´ `<b>=</b>´ exp | Name `<b>=</b>´ exp | exp
- fieldsep ::= `<b>,</b>´ | `<b>;</b>´
- </pre>
- <p>Each field of the form <code>[exp1] = exp2</code> adds to the new table an entry
- with key <code>exp1</code> and value <code>exp2</code>.
- A field of the form <code>name = exp</code> is equivalent to
- <code>["name"] = exp</code>.
- Finally, fields of the form <code>exp</code> are equivalent to
- <code>[i] = exp</code>, where <code>i</code> are consecutive numerical integers,
- starting with 1.
- Fields in the other formats do not affect this counting.
- For example,
- <PRE>
- a = {[f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45}
- </PRE>
- is equivalent to
- <PRE>
- do
- local temp = {}
- temp[f(1)] = g
- temp[1] = "x" -- 1st exp
- temp[2] = "y" -- 2nd exp
- temp.x = 1 -- temp["x"] = 1
- temp[3] = f(x) -- 3rd exp
- temp[30] = 23
- temp[4] = 45 -- 4th exp
- a = temp
- end
- </PRE>
- <p>If the last field in the list has the form <code>exp</code>
- and the expression is a function call,
- then all values returned by the call enter the list consecutively
- (see <a href="#functioncall">2.5.7</a>).
- To avoid this,
- enclose the function call in parentheses (see <a href="#expressions">2.5</a>).
- <p>The field list may have an optional trailing separator,
- as a convenience for machine-generated code.
- <p><a name="functioncall"><a name="2.5.7"><h3>2.5.7 - Function Calls</h3></a></a>
- A function call in Lua has the following syntax:
- <pre>
- functioncall ::= prefixexp args
- </pre>
- In a function call,
- first <em>prefixexp</em> and <em>args</em> are evaluated.
- If the value of <em>prefixexp</em> has type <em>function</em>,
- then that function is called
- with the given arguments.
- Otherwise, its "call" metamethod is called,
- having as first parameter the value of <em>prefixexp</em>,
- followed by the original call arguments
- (see <a href="#metatable">2.8</a>).
- <p>The form
- <pre>
- functioncall ::= prefixexp `<b>:</b>´ Name args
- </pre>
- can be used to call "methods".
- A call <code>v:name(...)</code>
- is syntactic sugar for <code>v.name(v,...)</code>,
- except that <code>v</code> is evaluated only once.
- <p>Arguments have the following syntax:
- <pre>
- args ::= `<b>(</b>´ [explist1] `<b>)</b>´
- args ::= tableconstructor
- args ::= Literal
- </pre>
- All argument expressions are evaluated before the call.
- A call of the form <code>f{...}</code> is syntactic sugar for
- <code>f({...})</code>, that is,
- the argument list is a single new table.
- A call of the form <code>f'...'</code>
- (or <code>f"..."</code> or <code>f[[...]]</code>) is syntactic sugar for
- <code>f('...')</code>, that is,
- the argument list is a single literal string.
- <p>Because a function can return any number of results
- (see <a href="#control">2.4.4</a>),
- the number of results must be adjusted before they are used.
- If the function is called as a statement (see <a href="#funcstat">2.4.6</a>),
- then its return list is adjusted to zero elements,
- thus discarding all returned values.
- If the function is called inside another expression
- or in the middle of a list of expressions,
- then its return list is adjusted to one element,
- thus discarding all returned values except the first one.
- If the function is called as the last element of a list of expressions,
- then no adjustment is made
- (unless the call is enclosed in parentheses).
- <p>Here are some examples:
- <PRE>
- f() -- adjusted to 0 results
- g(f(), x) -- f() is adjusted to 1 result
- g(x, f()) -- g gets x plus all values returned by f()
- a,b,c = f(), x -- f() is adjusted to 1 result (and c gets nil)
- a,b,c = x, f() -- f() is adjusted to 2 results
- a,b,c = f() -- f() is adjusted to 3 results
- return f() -- returns all values returned by f()
- return x,y,f() -- returns x, y, and all values returned by f()
- {f()} -- creates a list with all values returned by f()
- {f(), nil} -- f() is adjusted to 1 result
- </PRE>
- <p>If you enclose a function call in parentheses,
- then it is adjusted to return exactly one value:
- <PRE>
- return x,y,(f()) -- returns x, y, and the first value from f()
- {(f())} -- creates a table with exactly one element
- </PRE>
- <p>As an exception to the free-format syntax of Lua,
- you cannot put a line break before the `<code>(</code>´ in a function call.
- That restriction avoids some ambiguities in the language.
- If you write
- <PRE>
- a = f
- (g).x(a)
- </PRE>
- Lua would read that as <code>a = f(g).x(a)</code>.
- So, if you want two statements, you must add a semi-colon between them.
- If you actually want to call <code>f</code>,
- you must remove the line break before <code>(g)</code>.
- <p>A call of the form <code>return</code> <em>functioncall</em> is called
- a <em>tail call</em>.
- Lua implements <em>proper tail calls</em>
- (or <em>proper tail recursion</em>):
- In a tail call,
- the called function reuses the stack entry of the calling function.
- Therefore, there is no limit on the number of nested tail calls that
- a program can execute.
- However, a tail call erases any debug information about the
- calling function.
- Note that a tail call only happens with a particular syntax,
- where the <b>return</b> has one single function call as argument;
- this syntax makes the calling function returns exactly
- the returns of the called function.
- So, all the following examples are not tail calls:
- <PRE>
- return (f(x)) -- results adjusted to 1
- return 2 * f(x)
- return x, f(x) -- additional results
- f(x); return -- results discarded
- return x or f(x) -- results adjusted to 1
- </PRE>
- <p><a name="func-def"><a name="2.5.8"><h3>2.5.8 - Function Definitions</h3></a></a>
- <p>The syntax for function definition is
- <pre>
- function ::= <b>function</b> funcbody
- funcbody ::= `<b>(</b>´ [parlist1] `<b>)</b>´ block <b>end</b>
- </pre>
- <p>The following syntactic sugar simplifies function definitions:
- <pre>
- stat ::= <b>function</b> funcname funcbody
- stat ::= <b>local</b> <b>function</b> Name funcbody
- funcname ::= Name {`<b>.</b>´ Name} [`<b>:</b>´ Name]
- </pre>
- The statement
- <PRE>
- function f () ... end
- </PRE>
- translates to
- <PRE>
- f = function () ... end
- </PRE>
- The statement
- <PRE>
- function t.a.b.c.f () ... end
- </PRE>
- translates to
- <PRE>
- t.a.b.c.f = function () ... end
- </PRE>
- The statement
- <PRE>
- local function f () ... end
- </PRE>
- translates to
- <PRE>
- local f; f = function () ... end
- </PRE>
- <p>A function definition is an executable expression,
- whose value has type <em>function</em>.
- When Lua pre-compiles a chunk,
- all its function bodies are pre-compiled too.
- Then, whenever Lua executes the function definition,
- the function is <em>instantiated</em> (or <em>closed</em>).
- This function instance (or <em>closure</em>)
- is the final value of the expression.
- Different instances of the same function
- may refer to different external local variables
- and may have different environment tables.
- <p>Parameters act as local variables that are
- initialized with the argument values:
- <pre>
- parlist1 ::= namelist [`<b>,</b>´ `<b>...</b>´]
- parlist1 ::= `<b>...</b>´
- </pre>
- When a function is called,
- the list of arguments is adjusted to
- the length of the list of parameters,
- unless the function is a variadic or <em>vararg function</em>,
- which is
- indicated by three dots (`<code>...</code>´) at the end of its parameter list.
- A vararg function does not adjust its argument list;
- instead, it collects all extra arguments into an implicit parameter,
- called <code>arg</code>.
- The value of <a name="vararg"><code>arg</code></a> is a table,
- with a field `<code>n</code>´ that holds the number of extra arguments
- and with the extra arguments at positions 1, 2, ..., <code>n</code>.
- <p>As an example, consider the following definitions:
- <PRE>
- function f(a, b) end
- function g(a, b, ...) end
- function r() return 1,2,3 end
- </PRE>
- Then, we have the following mapping from arguments to parameters:
- <PRE>
- CALL PARAMETERS
- f(3) a=3, b=nil
- f(3, 4) a=3, b=4
- f(3, 4, 5) a=3, b=4
- f(r(), 10) a=1, b=10
- f(r()) a=1, b=2
- g(3) a=3, b=nil, arg={n=0}
- g(3, 4) a=3, b=4, arg={n=0}
- g(3, 4, 5, 8) a=3, b=4, arg={5, 8; n=2}
- g(5, r()) a=5, b=1, arg={2, 3; n=2}
- </PRE>
- <p>Results are returned using the <b>return</b> statement (see <a href="#control">2.4.4</a>).
- If control reaches the end of a function
- without encountering a <b>return</b> statement,
- then the function returns with no results.
- <p>The <em>colon</em> syntax
- is used for defining <em>methods</em>,
- that is, functions that have an implicit extra parameter <code>self</code>.
- Thus, the statement
- <PRE>
- function t.a.b.c:f (...) ... end
- </PRE>
- is syntactic sugar for
- <PRE>
- t.a.b.c.f = function (self, ...) ... end
- </PRE>
- <p><a name="visibility"><a name="2.6"><h2>2.6 - Visibility Rules</h2></a></a>
- <p>Lua is a lexically scoped language.
- The scope of variables begins at the first statement <em>after</em>
- their declaration and lasts until the end of the innermost block that
- includes the declaration.
- For instance:
- <PRE>
- x = 10 -- global variable
- do -- new block
- local x = x -- new `x', with value 10
- print(x) --> 10
- x = x+1
- do -- another block
- local x = x+1 -- another `x'
- print(x) --> 12
- end
- print(x) --> 11
- end
- print(x) --> 10 (the global one)
- </PRE>
- Notice that, in a declaration like <code>local x = x</code>,
- the new <code>x</code> being declared is not in scope yet,
- and so the second <code>x</code> refers to the outside variable.
- <p>Because of the lexical scoping rules,
- local variables can be freely accessed by functions
- defined inside their scope.
- For instance:
- <PRE>
- local counter = 0
- function inc (x)
- counter = counter + x
- return counter
- end
- </PRE>
- A local variable used by an inner function is called
- an <em>upvalue</em>, or <em>external local variable</em>,
- inside the inner function.
- <p>Notice that each execution of a <b>local</b> statement
- defines new local variables.
- Consider the following example:
- <PRE>
- a = {}
- local x = 20
- for i=1,10 do
- local y = 0
- a[i] = function () y=y+1; return x+y end
- end
- </PRE>
- The loop creates ten closures
- (that is, ten instances of the anonymous function).
- Each of these closures uses a different <code>y</code> variable,
- while all of them share the same <code>x</code>.
- <p><a name="error"><a name="2.7"><h2>2.7 - Error Handling</h2></a></a>
- <p>Because Lua is an extension language,
- all Lua actions start from C code in the host program
- calling a function from the Lua library (see <a href="#lua_pcall">3.15</a>).
- Whenever an error occurs during Lua compilation or execution,
- control returns to C,
- which can take appropriate measures
- (such as print an error message).
- <p>Lua code can explicitly generate an error by calling the
- <code>error</code> function (see <a href="#pdf-error">5.1</a>).
- If you need to catch errors in Lua,
- you can use the <code>pcall</code> function (see <a href="#pdf-pcall">5.1</a>).
- <p><a name="metatable"><a name="2.8"><h2>2.8 - Metatables</h2></a></a>
- <p>Every table and userdata object in Lua may have a <em>metatable</em>.
- This <em>metatable</em> is an ordinary Lua table
- that defines the behavior of the original table and userdata
- under certain special operations.
- You can change several aspects of the behavior
- of an object by setting specific fields in its metatable.
- For instance, when an object is the operand of an addition,
- Lua checks for a function in the field <code>"__add"</code> in its metatable.
- If it finds one,
- Lua calls that function to perform the addition.
- <p>We call the keys in a metatable <em>events</em>
- and the values <em>metamethods</em>.
- In the previous example, the event is <code>"add"</code>
- and the metamethod is the function that performs the addition.
- <p>You can query and change the metatable of an object
- through the <code>set/getmetatable</code>
- functions (see <a href="#pdf-getmetatable">5.1</a>).
- <p>A metatable may control how an object behaves in arithmetic operations,
- order comparisons, concatenation, and indexing.
- A metatable can also define a function to be called when a userdata
- is garbage collected.
- For each of those operations Lua associates a specific key
- called an <em>event</em>.
- When Lua performs one of those operations over a table or a userdata,
- it checks whether that object has a metatable with the corresponding event.
- If so, the value associated with that key (the <em>metamethod</em>)
- controls how Lua will perform the operation.
- <p>Metatables control the operations listed next.
- Each operation is identified by its corresponding name.
- The key for each operation is a string with its name prefixed by
- two underscores;
- for instance, the key for operation "add" is the
- string <code>"__add"</code>.
- The semantics of these operations is better explained by a Lua function
- describing how the interpreter executes that operation.
- <p>The code shown here in Lua is only illustrative;
- the real behavior is hard coded in the interpreter
- and it is much more efficient than this simulation.
- All functions used in these descriptions
- (<code>rawget</code>, <code>tonumber</code>, etc.)
- are described in <a href="#predefined">5.1</a>.
- In particular, to retrieve the metamethod of a given object,
- we use the expression
- <PRE>
- metatable(obj)[event]
- </PRE>
- This should be read as
- <PRE>
- rawget(metatable(obj) or {}, event)
- </PRE>
- That is, the access to a metamethod does not invoke other metamethods,
- and the access to objects with no metatables does not fail
- (it simply results in <B>nil</B>).
- <p><ul>
- <p><li><b>"add":</b>
- the <code>+</code> operation.
- <p>The function <code>getbinhandler</code> below defines how Lua chooses a handler
- for a binary operation.
- First, Lua tries the first operand.
- If its type does not define a handler for the operation,
- then Lua tries the second operand.
- <PRE>
- function getbinhandler (op1, op2, event)
- return metatable(op1)[event] or metatable(op2)[event]
- end
- </PRE>
- Using that function,
- the behavior of the <code>op1 + op2</code> is
- <PRE>
- function add_event (op1, op2)
- local o1, o2 = tonumber(op1), tonumber(op2)
- if o1 and o2 then -- both operands are numeric?
- return o1 + o2 -- `+' here is the primitive `add'
- else -- at least one of the operands is not numeric
- local h = getbinhandler(op1, op2, "__add")
- if h then
- -- call the handler with both operands
- return h(op1, op2)
- else -- no handler available: default behavior
- error("...")
- end
- end
- end
- </PRE>
- <p><li><b>"sub":</b>
- the <code>-</code> operation.
- Behavior similar to the "add" operation.
- <p><li><b>"mul":</b>
- the <code>*</code> operation.
- Behavior similar to the "add" operation.
- <p><li><b>"div":</b>
- the <code>/</code> operation.
- Behavior similar to the "add" operation.
- <p><li><b>"pow":</b>
- the <code>^</code> (exponentiation) operation.
- <PRE>
- function pow_event (op1, op2)
- local o1, o2 = tonumber(op1), tonumber(op2)
- if o1 and o2 then -- both operands are numeric?
- return __pow(o1, o2) -- call global `__pow'
- else -- at least one of the operands is not numeric
- local h = getbinhandler(op1, op2, "__pow")
- if h then
- -- call the handler with both operands
- return h(op1, op2)
- else -- no handler available: default behavior
- error("...")
- end
- end
- end
- </PRE>
- <p><li><b>"unm":</b>
- the unary <code>-</code> operation.
- <PRE>
- function unm_event (op)
- local o = tonumber(op)
- if o then -- operand is numeric?
- return -o -- `-' here is the primitive `unm'
- else -- the operand is not numeric.
- -- Try to get a handler from the operand
- local h = metatable(op).__unm
- if h then
- -- call the handler with the operand and nil
- return h(op, nil)
- else -- no handler available: default behavior
- error("...")
- end
- end
- end
- </PRE>
- <p><li><b>"concat":</b>
- the <code>..</code> (concatenation) operation.
- <PRE>
- function concat_event (op1, op2)
- if (type(op1) == "string" or type(op1) == "number") and
- (type(op2) == "string" or type(op2) == "number") then
- return op1 .. op2 -- primitive string concatenation
- else
- local h = getbinhandler(op1, op2, "__concat")
- if h then
- return h(op1, op2)
- else
- error("...")
- end
- end
- end
- </PRE>
- <p><li><b>"eq":</b>
- the <code>==</code> operation.
- The function <code>getcomphandler</code> defines how Lua chooses a metamethod
- for comparison operators.
- A metamethod only is selected when both objects
- being compared have the same type
- and the same metamethod for the selected operation.
- <PRE>
- function getcomphandler (op1, op2, event)
- if type(op1) ~= type(op2) then return nil end
- local mm1 = metatable(op1)[event]
- local mm2 = metatable(op2)[event]
- if mm1 == mm2 then return mm1 else return nil end
- end
- </PRE>
- The "eq" event is defined as follows:
- <PRE>
- function eq_event (op1, op2)
- if type(op1) ~= type(op2) then -- different types?
- return false -- different objects
- end
- if op1 == op2 then -- primitive equal?
- return true -- objects are equal
- end
- -- try metamethod
- local h = getcomphandler(op1, op2, "__eq")
- if h then
- return h(op1, op2)
- else
- return false
- end
- end
- </PRE>
- <code>a ~= b</code> is equivalent to <code>not (a == b)</code>.
- <p><li><b>"lt":</b>
- the <code><</code> operation.
- <PRE>
- function lt_event (op1, op2)
- if type(op1) == "number" and type(op2) == "number" then
- return op1 < op2 -- numeric comparison
- elseif type(op1) == "string" and type(op2) == "string" then
- return op1 < op2 -- lexicographic comparison
- else
- local h = getcomphandler(op1, op2, "__lt")
- if h then
- return h(op1, op2)
- else
- error("...");
- end
- end
- end
- </PRE>
- <code>a > b</code> is equivalent to <code>b < a</code>.
- <p><li><b>"le":</b>
- the <code><=</code> operation.
- <PRE>
- function le_event (op1, op2)
- if type(op1) == "number" and type(op2) == "number" then
- return op1 <= op2 -- numeric comparison
- elseif type(op1) == "string" and type(op2) == "string" then
- return op1 <= op2 -- lexicographic comparison
- else
- local h = getcomphandler(op1, op2, "__le")
- if h then
- return h(op1, op2)
- else
- h = getcomphandler(op1, op2, "__lt")
- if h then
- return not h(op2, op1)
- else
- error("...");
- end
- end
- end
- end
- </PRE>
- <code>a >= b</code> is equivalent to <code>b <= a</code>.
- Note that, in the absence of a "le" metamethod,
- Lua tries the "lt", assuming that <code>a <= b</code> is
- equivalent to <code>not (b < a)</code>.
- <p><li><b>"index":</b>
- The indexing access <code>table[key]</code>.
- <PRE>
- function gettable_event (table, key)
- local h
- if type(table) == "table" then
- local v = rawget(table, key)
- if v ~= nil then return v end
- h = metatable(table).__index
- if h == nil then return nil end
- else
- h = metatable(table).__index
- if h == nil then
- error("...");
- end
- end
- if type(h) == "function" then
- return h(table, key) -- call the handler
- else return h[key] -- or repeat operation on it
- end
- </PRE>
- <p><li><b>"newindex":</b>
- The indexing assignment <code>table[key] = value</code>.
- <PRE>
- function settable_event (table, key, value)
- local h
- if type(table) == "table" then
- local v = rawget(table, key)
- if v ~= nil then rawset(table, key, value); return end
- h = metatable(table).__newindex
- if h == nil then rawset(table, key, value); return end
- else
- h = metatable(table).__newindex
- if h == nil then
- error("...");
- end
- end
- if type(h) == "function" then
- return h(table, key,value) -- call the handler
- else h[key] = value -- or repeat operation on it
- end
- </PRE>
- <p><li><b>"call":</b>
- called when Lua calls a value.
- <PRE>
- function function_event (func, ...)
- if type(func) == "function" then
- return func(unpack(arg)) -- primitive call
- else
- local h = metatable(func).__call
- if h then
- return h(func, unpack(arg))
- else
- error("...")
- end
- end
- end
- </PRE>
- <p></ul>
- <p><a name="GC"><a name="2.9"><h2>2.9 - Garbage Collection</h2></a></a>
- <p>Lua does automatic memory management.
- That means that
- you do not have to worry about allocating memory for new objects
- and freeing it when the objects are no longer needed.
- Lua manages memory automatically by running
- a <em>garbage collector</em> from time to time
- to collect all <em>dead objects</em>
- (that is, those objects that are no longer accessible from Lua).
- All objects in Lua are subject to automatic management:
- tables, userdata, functions, threads, and strings.
- <p>Lua uses two numbers to control its garbage-collection cycles.
- One number counts how many bytes of dynamic memory Lua is using;
- the other is a threshold.
- When the number of bytes crosses the threshold,
- Lua runs the garbage collector,
- which reclaims the memory of all dead objects.
- The byte counter is adjusted,
- and then the threshold is reset to twice the new value of the byte counter.
- <p>Through the C API, you can query those numbers
- and change the threshold (see <a href="#GC-API">3.7</a>).
- Setting the threshold to zero actually forces an immediate
- garbage-collection cycle,
- while setting it to a huge number effectively stops the garbage collector.
- Using Lua code you have a more limited control over garbage-collection cycles,
- through the <code>gcinfo</code> and <code>collectgarbage</code> functions
- (see <a href="#predefined">5.1</a>).
- <p><a name="2.9.1"><h3>2.9.1 - Garbage-Collection Metamethods</h3></a>
- <p>Using the C API,
- you can set garbage-collector metamethods for userdata (see <a href="#metatable">2.8</a>).
- These metamethods are also called <em>finalizers</em>.
- Finalizers allow you to coordinate Lua's garbage collection
- with external resource management
- (such as closing files, network or database connections,
- or freeing your own memory).
- <p>Free userdata with a field <code>__gc</code> in their metatables are not
- collected immediately by the garbage collector.
- Instead, Lua puts them in a list.
- After the collection,
- Lua does the equivalent of the following function
- for each userdata in that list:
- <PRE>
- function gc_event (udata)
- local h = metatable(udata).__gc
- if h then
- h(udata)
- end
- end
- </PRE>
- <p>At the end of each garbage-collection cycle,
- the finalizers for userdata are called in <em>reverse</em>
- order of their creation,
- among those collected in that cycle.
- That is, the first finalizer to be called is the one associated
- with the userdata created last in the program.
- <p><a name="weak-table"><a name="2.9.2"><h3>2.9.2 - Weak Tables</h3></a></a>
- <p>A <em>weak table</em> is a table whose elements are
- <em>weak references</em>.
- A weak reference is ignored by the garbage collector.
- In other words,
- if the only references to an object are weak references,
- then the garbage collector will collect that object.
- <p>A weak table can have weak keys, weak values, or both.
- A table with weak keys allows the collection of its keys,
- but prevents the collection of its values.
- A table with both weak keys and weak values allows the collection of
- both keys and values.
- In any case, if either the key or the value is collected,
- the whole pair is removed from the table.
- The weakness of a table is controlled by the value of the
- <code>__mode</code> field of its metatable.
- If the <code>__mode</code> field is a string containing the character `<code>k</code>´,
- the keys in the table are weak.
- If <code>__mode</code> contains `<code>v</code>´,
- the values in the table are weak.
- <p>After you use a table as a metatable,
- you should not change the value of its field <code>__mode</code>.
- Otherwise, the weak behavior of the tables controlled by this
- metatable is undefined.
- <p><a name="coroutine"><a name="2.10"><h2>2.10 - Coroutines</h2></a></a>
- <p>Lua supports coroutines,
- also called <em>semi-coroutines</em>
- or <em>collaborative multithreading</em>.
- A coroutine in Lua represents an independent thread of execution.
- Unlike threads in multithread systems, however,
- a coroutine only suspends its execution by explicitly calling
- a yield function.
- <p>You create a coroutine with a call to <code>coroutine.create</code>.
- Its sole argument is a function
- that is the main function of the coroutine.
- The <code>create</code> function only creates a new coroutine and
- returns a handle to it (an object of type <em>thread</em>);
- it does not start the coroutine execution.
- <p>When you first call <code>coroutine.resume</code>,
- passing as its first argument the thread returned by <code>coroutine.create</code>,
- the coroutine starts its execution,
- at the first line of its main function.
- Extra arguments passed to <code>coroutine.resume</code> are given as
- parameters for the coroutine main function.
- After the coroutine starts running,
- it runs until it terminates or <em>yields</em>.
- <p>A coroutine can terminate its execution in two ways:
- Normally, when its main function returns
- (explicitly or implicitly, after the last instruction);
- and abnormally, if there is an unprotected error.
- In the first case, <code>coroutine.resume</code> returns <B>true</B>,
- plus any values returned by the coroutine main function.
- In case of errors, <code>coroutine.resume</code> returns <B>false</B>
- plus an error message.
- <p>A coroutine yields by calling <code>coroutine.yield</code>.
- When a coroutine yields,
- the corresponding <code>coroutine.resume</code> returns immediately,
- even if the yield happens inside nested function calls
- (that is, not in the main function,
- but in a function directly or indirectly called by the main function).
- In the case of a yield, <code>coroutine.resume</code> also returns <B>true</B>,
- plus any values passed to <code>coroutine.yield</code>.
- The next time you resume the same coroutine,
- it continues its execution from the point where it yielded,
- with the call to <code>coroutine.yield</code> returning any extra
- arguments passed to <code>coroutine.resume</code>.
- <p>The <code>coroutine.wrap</code> function creates a coroutine
- like <code>coroutine.create</code>,
- but instead of returning the coroutine itself,
- it returns a function that, when called, resumes the coroutine.
- Any arguments passed to that function
- go as extra arguments to resume.
- The function returns all the values returned by resume,
- except the first one (the boolean error code).
- Unlike <code>coroutine.resume</code>,
- this function does not catch errors;
- any error is propagated to the caller.
- <p>As an example,
- consider the next code:
- <PRE>
- function foo1 (a)
- print("foo", a)
- return coroutine.yield(2*a)
- end
- co = coroutine.create(function (a,b)
- print("co-body", a, b)
- local r = foo1(a+1)
- print("co-body", r)
- local r, s = coroutine.yield(a+b, a-b)
- print("co-body", r, s)
- return b, "end"
- end)
-
- a, b = coroutine.resume(co, 1, 10)
- print("main", a, b)
- a, b, c = coroutine.resume(co, "r")
- print("main", a, b, c)
- a, b, c = coroutine.resume(co, "x", "y")
- print("main", a, b, c)
- a, b = coroutine.resume(co, "x", "y")
- print("main", a, b)
- </PRE>
- When you run it, it produces the following output:
- <PRE>
- co-body 1 10
- foo 2
- main true 4
- co-body r
- main true 11 -9
- co-body x y
- main true 10 end
- main false cannot resume dead coroutine
- </PRE>
- <p>
- <a name="API"><a name="3"><h1>3 - The Application Program Interface</h1></a></a>
- <p>This section describes the C API for Lua, that is,
- the set of C functions available to the host program to communicate
- with Lua.
- All API functions and related types and constants
- are declared in the header file <code>lua.h</code>.
- <p>Even when we use the term "function",
- any facility in the API may be provided as a <em>macro</em> instead.
- All such macros use each of its arguments exactly once
- (except for the first argument, which is always a Lua state),
- and so do not generate hidden side-effects.
- <p><a name="mangstate"><a name="3.1"><h2>3.1 - States</h2></a></a>
- <p>The Lua library is fully reentrant:
- it has no global variables.
- The whole state of the Lua interpreter
- (global variables, stack, etc.)
- is stored in a dynamically allocated structure of type <code>lua_State</code>.
- A pointer to this state must be passed as the first argument to
- every function in the library, except to <code>lua_open</code>,
- which creates a Lua state from scratch.
- <p>Before calling any API function,
- you must create a state by calling <code>lua_open</code>:
- <PRE>
- lua_State *lua_open (void);
- </PRE>
- <p>To release a state created with <code>lua_open</code>, call <code>lua_close</code>:
- <PRE>
- void lua_close (lua_State *L);
- </PRE>
- This function destroys all objects in the given Lua state
- (calling the corresponding garbage-collection metamethods, if any)
- and frees all dynamic memory used by that state.
- On several platforms, you may not need to call this function,
- because all resources are naturally released when the host program ends.
- On the other hand,
- long-running programs,
- such as a daemon or a web server,
- might need to release states as soon as they are not needed,
- to avoid growing too large.
- <p><a name="3.2"><h2>3.2 - The Stack and Indices</h2></a>
- <p>Lua uses a <em>virtual stack</em> to pass values to and from C.
- Each element in this stack represents a Lua value
- (<B>nil</B>, number, string, etc.).
- <p>Whenever Lua calls C, the called function gets a new stack,
- which is independent of previous stacks and of stacks of
- C functions that are still active.
- That stack initially contains any arguments to the C function,
- and it is where the C function pushes its results to be returned to the caller (see <a href="#LuacallC">3.16</a>).
- <p>For convenience,
- most query operations in the API do not follow a strict stack discipline.
- Instead, they can refer to any element in the stack by using an <em>index</em>:
- A positive index represents an <em>absolute</em> stack position
- (starting at 1);
- a negative index represents an <em>offset</em> from the top of the stack.
- More specifically, if the stack has <em>n</em> elements,
- then index 1 represents the first element
- (that is, the element that was pushed onto the stack first)
- and
- index <em>n</em> represents the last element;
- index <em>-1</em> also represents the last element
- (that is, the element at the top)
- and index <em>-n</em> represents the first element.
- We say that an index is <em>valid</em>
- if it lies between 1 and the stack top
- (that is, if <code>1 <= abs(index) <= top</code>).
-
- <p>At any time, you can get the index of the top element by calling
- <code>lua_gettop</code>:
- <PRE>
- int lua_gettop (lua_State *L);
- </PRE>
- Because indices start at 1,
- the result of <code>lua_gettop</code> is equal to the number of elements in the stack
- (and so 0 means an empty stack).
- <p>When you interact with Lua API,
- <em>you are responsible for controlling stack overflow</em>.
- The function
- <PRE>
- int lua_checkstack (lua_State *L, int extra);
- </PRE>
- grows the stack size to <code>top + extra</code> elements;
- it returns false if it cannot grow the stack to that size.
- This function never shrinks the stack;
- if the stack is already larger than the new size,
- it is left unchanged.
- <p>Whenever Lua calls C,
- it ensures that at least <code>LUA_MINSTACK</code> stack positions are available.
- <code>LUA_MINSTACK</code> is defined in <code>lua.h</code> as 20,
- so that usually you do not have to worry about stack space
- unless your code has loops pushing elements onto the stack.
- <p>Most query functions accept as indices any value inside the
- available stack space, that is, indices up to the maximum stack size
- you have set through <code>lua_checkstack</code>.
- Such indices are called <em>acceptable indices</em>.
- More formally, we define an <em>acceptable index</em>
- as follows:
- <PRE>
- (index < 0 && abs(index) <= top) || (index > 0 && index <= stackspace)
- </PRE>
- Note that 0 is never an acceptable index.
- <p>Unless otherwise noted,
- any function that accepts valid indices can also be called with
- <em>pseudo-indices</em>,
- which represent some Lua values that are accessible to the C code
- but are not in the stack.
- Pseudo-indices are used to access the global environment,
- the registry, and the upvalues of a C function (see <a href="#c-closure">3.17</a>).
- <p><a name="3.3"><h2>3.3 - Stack Manipulation</h2></a>
- The API offers the following functions for basic stack manipulation:
- <PRE>
- void lua_settop (lua_State *L, int index);
- void lua_pushvalue (lua_State *L, int index);
- void lua_remove (lua_State *L, int index);
- void lua_insert (lua_State *L, int index);
- void lua_replace (lua_State *L, int index);
- </PRE>
- <p><code>lua_settop</code> accepts any acceptable index,
- or 0,
- and sets the stack top to that index.
- If the new top is larger than the old one,
- then the new elements are filled with <B>nil</B>.
- If <code>index</code> is 0, then all stack elements are removed.
- A useful macro defined in the <code>lua.h</code> is
- <PRE>
- #define lua_pop(L,n) lua_settop(L, -(n)-1)
- </PRE>
- which pops <code>n</code> elements from the stack.
- <p><code>lua_pushvalue</code> pushes onto the stack a copy of the element
- at the given index.
- <code>lua_remove</code> removes the element at the given position,
- shifting down the elements above that position to fill the gap.
- <code>lua_insert</code> moves the top element into the given position,
- shifting up the elements above that position to open space.
- <code>lua_replace</code> moves the top element into the given position,
- without shifting any element (therefore replacing the value at
- the given position).
- All these functions accept only valid indices.
- (You cannot call <code>lua_remove</code> or <code>lua_insert</code> with
- pseudo-indices, as they do not represent a stack position.)
- <p>As an example, if the stack starts as <code>10 20 30 40 50*</code>
- (from bottom to top; the `<code>*</code>´ marks the top),
- then
- <PRE>
- lua_pushvalue(L, 3) --> 10 20 30 40 50 30*
- lua_pushvalue(L, -1) --> 10 20 30 40 50 30 30*
- lua_remove(L, -3) --> 10 20 30 40 30 30*
- lua_remove(L, 6) --> 10 20 30 40 30*
- lua_insert(L, 1) --> 30 10 20 30 40*
- lua_insert(L, -1) --> 30 10 20 30 40* (no effect)
- lua_replace(L, 2) --> 30 40 20 30*
- lua_settop(L, -3) --> 30 40*
- lua_settop(L, 6) --> 30 40 nil nil nil nil*
- </PRE>
- <p><a name="3.4"><h2>3.4 - Querying the Stack</h2></a>
- <p>To check the type of a stack element,
- the following functions are available:
- <PRE>
- int lua_type (lua_State *L, int index);
- int lua_isnil (lua_State *L, int index);
- int lua_isboolean (lua_State *L, int index);
- int lua_isnumber (lua_State *L, int index);
- int lua_isstring (lua_State *L, int index);
- int lua_istable (lua_State *L, int index);
- int lua_isfunction (lua_State *L, int index);
- int lua_iscfunction (lua_State *L, int index);
- int lua_isuserdata (lua_State *L, int index);
- int lua_islightuserdata (lua_State *L, int index);
- </PRE>
- These functions can be called with any acceptable index.
- <p><code>lua_type</code> returns the type of a value in the stack,
- or <code>LUA_TNONE</code> for a non-valid index
- (that is, if that stack position is "empty").
- The types returned by <code>lua_type</code> are coded by the following constants
- defined in <code>lua.h</code>:
- <code>LUA_TNIL</code>,
- <code>LUA_TNUMBER</code>,
- <code>LUA_TBOOLEAN</code>,
- <code>LUA_TSTRING</code>,
- <code>LUA_TTABLE</code>,
- <code>LUA_TFUNCTION</code>,
- <code>LUA_TUSERDATA</code>,
- <code>LUA_TTHREAD</code>,
- <code>LUA_TLIGHTUSERDATA</code>.
- The following function translates these constants to strings:
- <PRE>
- const char *lua_typename (lua_State *L, int type);
- </PRE>
- <p>The <code>lua_is*</code> functions return 1 if the object is compatible
- with the given type, and 0 otherwise.
- <code>lua_isboolean</code> is an exception to this rule:
- It succeeds only for boolean values
- (otherwise it would be useless,
- as any value has a boolean value).
- They always return 0 for a non-valid index.
- <code>lua_isnumber</code> accepts numbers and numerical strings;
- <code>lua_isstring</code> accepts strings and numbers (see <a href="#coercion">2.2.1</a>);
- <code>lua_isfunction</code> accepts both Lua functions and C functions;
- and <code>lua_isuserdata</code> accepts both full and light userdata.
- To distinguish between Lua functions and C functions,
- you can use <code>lua_iscfunction</code>.
- To distinguish between full and light userdata,
- you can use <code>lua_islightuserdata</code>.
- To distinguish between numbers and numerical strings,
- you can use <code>lua_type</code>.
- <p>The API also contains functions to compare two values in the stack:
- <PRE>
- int lua_equal (lua_State *L, int index1, int index2);
- int lua_rawequal (lua_State *L, int index1, int index2);
- int lua_lessthan (lua_State *L, int index1, int index2);
- </PRE>
- <code>lua_equal</code> and <code>lua_lessthan</code>
- are equivalent to their counterparts in Lua (see <a href="#rel-ops">2.5.2</a>).
- <code>lua_rawequal</code> compares the values for primitive equality,
- without metamethods.
- These functions return 0 (false) if any of the indices are non-valid.
- <p><a name="lua-to"><a name="3.5"><h2>3.5 - Getting Values from the Stack</h2></a></a>
- <p>To translate a value in the stack to a specific C type,
- you can use the following conversion functions:
- <PRE>
- int lua_toboolean (lua_State *L, int index);
- lua_Number lua_tonumber (lua_State *L, int index);
- const char *lua_tostring (lua_State *L, int index);
- size_t lua_strlen (lua_State *L, int index);
- lua_CFunction lua_tocfunction (lua_State *L, int index);
- void *lua_touserdata (lua_State *L, int index);
- lua_State *lua_tothread (lua_State *L, int index);
- void *lua_topointer (lua_State *L, int index);
- </PRE>
- These functions can be called with any acceptable index.
- When called with a non-valid index,
- they act as if the given value had an incorrect type.
- <p><code>lua_toboolean</code> converts the Lua value at the given index
- to a C "boolean" value (0 or 1).
- Like all tests in Lua, <code>lua_toboolean</code> returns 1 for any Lua value
- different from <B>false</B> and <B>nil</B>;
- otherwise it returns 0.
- It also returns 0 when called with a non-valid index.
- (If you want to accept only real boolean values,
- use <code>lua_isboolean</code> to test the type of the value.)
- <p><code>lua_tonumber</code> converts the Lua value at the given index
- to a number (by default, <code>lua_Number</code> is <code>double</code>).
- The Lua value must be a number or a string convertible to number
- (see <a href="#coercion">2.2.1</a>); otherwise, <code>lua_tonumber</code> returns 0.
- <p><code>lua_tostring</code> converts the Lua value at the given index to a string
- (<code>const char*</code>).
- The Lua value must be a string or a number;
- otherwise, the function returns <code>NULL</code>.
- If the value is a number,
- then <code>lua_tostring</code> also
- <em>changes the actual value in the stack to a string</em>.
- (This change confuses <code>lua_next</code>
- when <code>lua_tostring</code> is applied to keys.)
- <code>lua_tostring</code> returns a fully aligned pointer
- to a string inside the Lua state.
- This string always has a zero (<code>'\0'</code>)
- after its last character (as in C),
- but may contain other zeros in its body.
- If you do not know whether a string may contain zeros,
- you can use <code>lua_strlen</code> to get its actual length.
- Because Lua has garbage collection,
- there is no guarantee that the pointer returned by <code>lua_tostring</code>
- will be valid after the corresponding value is removed from the stack.
- If you need the string after the current function returns,
- then you should duplicate it or put it into the registry (see <a href="#registry">3.18</a>).
- <p><code>lua_tocfunction</code> converts a value in the stack to a C function.
- This value must be a C function;
- otherwise, <code>lua_tocfunction</code> returns <code>NULL</code>.
- The type <code>lua_CFunction</code> is explained in <a href="#LuacallC">3.16</a>.
- <p><code>lua_tothread</code> converts a value in the stack to a Lua thread
- (represented as <code>lua_State *</code>).
- This value must be a thread;
- otherwise, <code>lua_tothread</code> returns <code>NULL</code>.
- <p><code>lua_topointer</code> converts a value in the stack to a generic
- C pointer (<code>void *</code>).
- The value may be a userdata, a table, a thread, or a function;
- otherwise, <code>lua_topointer</code> returns <code>NULL</code>.
- Lua ensures that different objects of the
- same type return different pointers.
- There is no direct way to convert the pointer back to its original value.
- Typically this function is used for debug information.
- <p><code>lua_touserdata</code> is explained in <a href="#userdata">3.8</a>.
- <p><a name="pushing"><a name="3.6"><h2>3.6 - Pushing Values onto the Stack</h2></a></a>
- <p>The API has the following functions to
- push C values onto the stack:
- <PRE>
- void lua_pushboolean (lua_State *L, int b);
- void lua_pushnumber (lua_State *L, lua_Number n);
- void lua_pushlstring (lua_State *L, const char *s, size_t len);
- void lua_pushstring (lua_State *L, const char *s);
- void lua_pushnil (lua_State *L);
- void lua_pushcfunction (lua_State *L, lua_CFunction f);
- void lua_pushlightuserdata (lua_State *L, void *p);
- </PRE>
- <p>
- These functions receive a C value,
- convert it to a corresponding Lua value,
- and push the result onto the stack.
- In particular, <code>lua_pushlstring</code> and <code>lua_pushstring</code>
- make an internal copy of the given string.
- <code>lua_pushstring</code> can only be used to push proper C strings
- (that is, strings that end with a zero and do not contain embedded zeros);
- otherwise, you should use the more general <code>lua_pushlstring</code>,
- which accepts an explicit size.
- <p>You can also push "formatted" strings:
- <PRE>
- const char *lua_pushfstring (lua_State *L, const char *fmt, ...);
- const char *lua_pushvfstring (lua_State *L, const char *fmt, va_list argp);
- </PRE>
- These functions push onto the stack a formatted string
- and return a pointer to that string.
- They are similar to <code>sprintf</code> and <code>vsprintf</code>,
- but with some important differences:
- <ul>
- <li> You do not have to allocate the space for the result:
- The result is a Lua string and Lua takes care of memory allocation
- (and deallocation, through garbage collection).
- <li> The conversion specifiers are quite restricted.
- There are no flags, widths, or precisions.
- The conversion specifiers can be simply
- `<code>%%</code>´ (inserts a `<code>%</code>´ in the string),
- `<code>%s</code>´ (inserts a zero-terminated string, with no size restrictions),
- `<code>%f</code>´ (inserts a <code>lua_Number</code>),
- `<code>%d</code>´ (inserts an <code>int</code>), and
- `<code>%c</code>´ (inserts an <code>int</code> as a character).
- </ul>
- <p>The function
- <PRE>
- void lua_concat (lua_State *L, int n);
- </PRE>
- concatenates the <code>n</code> values at the top of the stack,
- pops them, and leaves the result at the top.
- If <code>n</code> is 1, the result is that single string
- (that is, the function does nothing);
- if <code>n</code> is 0, the result is the empty string.
- Concatenation is done following the usual semantics of Lua
- (see <a href="#concat">2.5.4</a>).
- <p><a name="GC-API"><a name="3.7"><h2>3.7 - Controlling Garbage Collection</h2></a></a>
- <p>Lua uses two numbers to control its garbage collection:
- the <em>count</em> and the <em>threshold</em> (see <a href="#GC">2.9</a>).
- The first counts the amount of memory in use by Lua;
- when the count reaches the threshold,
- Lua runs its garbage collector.
- After the collection, the count is updated
- and the threshold is set to twice the count value.
- <p>You can access the current values of these two numbers through the
- following functions:
- <PRE>
- int lua_getgccount (lua_State *L);
- int lua_getgcthreshold (lua_State *L);
- </PRE>
-
- Both return their respective values in Kbytes.
- You can change the threshold value with
- <PRE>
- void lua_setgcthreshold (lua_State *L, int newthreshold);
- </PRE>
- Again, the <code>newthreshold</code> value is given in Kbytes.
- When you call this function,
- Lua sets the new threshold and checks it against the byte counter.
- If the new threshold is less than the byte counter,
- then Lua immediately runs the garbage collector.
- In particular
- <code>lua_setgcthreshold(L,0)</code> forces a garbage collection.
- After the collection,
- a new threshold is set according to the previous rule.
- <p><a name="userdata"><a name="3.8"><h2>3.8 - Userdata</h2></a></a>
- <p>Userdata represents C values in Lua.
- Lua supports two types of userdata:
- <em>full userdata</em> and <em>light userdata</em>.
- <p>A full userdata represents a block of memory.
- It is an object (like a table):
- You must create it, it can have its own metatable,
- and you can detect when it is being collected.
- A full userdata is only equal to itself (under raw equality).
- <p>A light userdata represents a pointer.
- It is a value (like a number):
- You do not create it, it has no metatables,
- it is not collected (as it was never created).
- A light userdata is equal to "any"
- light userdata with the same C address.
- <p>In Lua code, there is no way to test whether a userdata is full or light;
- both have type <code>userdata</code>.
- In C code, <code>lua_type</code> returns <code>LUA_TUSERDATA</code> for full userdata,
- and <code>LUA_TLIGHTUSERDATA</code> for light userdata.
- <p>You can create a new full userdata with the following function:
- <PRE>
- void *lua_newuserdata (lua_State *L, size_t size);
- </PRE>
- This function allocates a new block of memory with the given size,
- pushes on the stack a new userdata with the block address,
- and returns this address.
- <p>To push a light userdata into the stack you use
- <code>lua_pushlightuserdata</code> (see <a href="#pushing">3.6</a>).
- <p><code>lua_touserdata</code> (see <a href="#lua-to">3.5</a>) retrieves the value of a userdata.
- When applied on a full userdata, it returns the address of its block;
- when applied on a light userdata, it returns its pointer;
- when applied on a non-userdata value, it returns <code>NULL</code>.
- <p>When Lua collects a full userdata,
- it calls the userdata's <code>gc</code> metamethod, if any,
- and then it frees the userdata's corresponding memory.
- <p><a name="3.9"><h2>3.9 - Metatables</h2></a>
- <p>The following functions allow you to manipulate the metatables
- of an object:
- <PRE>
- int lua_getmetatable (lua_State *L, int index);
- int lua_setmetatable (lua_State *L, int index);
- </PRE>
- <code>lua_getmetatable</code> pushes on the stack the metatable of a given object.
- If the index is not valid,
- or if the object does not have a metatable,
- <code>lua_getmetatable</code> returns 0 and pushes nothing on the stack.
- <p><code>lua_setmetatable</code> pops a table from the stack and
- sets it as the new metatable for the given object.
- <code>lua_setmetatable</code> returns 0 when it cannot
- set the metatable of the given object
- (that is, when the object is neither a userdata nor a table);
- even then it pops the table from the stack.
- <p><a name="3.10"><h2>3.10 - Loading Lua Chunks</h2></a>
- <p>You can load a Lua chunk with <code>lua_load</code>:
- <PRE>
- typedef const char * (*lua_Chunkreader)
- (lua_State *L, void *data, size_t *size);
- int lua_load (lua_State *L, lua_Chunkreader reader, void *data,
- const char *chunkname);
- </PRE>
- The return values of <code>lua_load</code> are:
- <ul>
- <li> 0 --- no errors;
- <li> <code>LUA_ERRSYNTAX</code> ---
- syntax error during pre-compilation.
- <li> <code>LUA_ERRMEM</code> ---
- memory allocation error.
- </ul>
- If there are no errors,
- <code>lua_load</code> pushes the compiled chunk as a Lua
- function on top of the stack.
- Otherwise, it pushes an error message.
- <p><code>lua_load</code> automatically detects whether the chunk is text or binary,
- and loads it accordingly (see program <code>luac</code>).
- <p><code>lua_load</code> uses a user-supplied <em>reader</em> function to read the chunk.
- Everytime it needs another piece of the chunk,
- <code>lua_load</code> calls the reader,
- passing along its <code>data</code> parameter.
- The reader must return a pointer to a block of memory
- with a new piece of the chunk
- and set <code>size</code> to the block size.
- To signal the end of the chunk, the reader returns <code>NULL</code>.
- The reader function may return pieces of any size greater than zero.
- <p>In the current implementation,
- the reader function cannot call any Lua function;
- to ensure that, it always receives <code>NULL</code> as the Lua state.
- <p>The <em>chunkname</em> is used for error messages
- and debug information (see <a href="#debugI">4</a>).
- <p>See the auxiliary library (<code>lauxlib.c</code>)
- for examples of how to use <code>lua_load</code>
- and for some ready-to-use functions to load chunks
- from files and strings.
- <p><a name="3.11"><h2>3.11 - Manipulating Tables</h2></a>
- <p>Tables are created by calling
- the function
- <PRE>
- void lua_newtable (lua_State *L);
- </PRE>
- This function creates a new, empty table and pushes it onto the stack.
- <p>To read a value from a table that resides somewhere in the stack,
- call
- <PRE>
- void lua_gettable (lua_State *L, int index);
- </PRE>
- where <code>index</code> points to the table.
- <code>lua_gettable</code> pops a key from the stack
- and returns (on the stack) the contents of the table at that key.
- The table is left where it was in the stack.
- As in Lua, this function may trigger a metamethod
- for the "index" event (see <a href="#metatable">2.8</a>).
- To get the real value of any table key,
- without invoking any metamethod,
- use the <em>raw</em> version:
- <PRE>
- void lua_rawget (lua_State *L, int index);
- </PRE>
- <p>To store a value into a table that resides somewhere in the stack,
- you push the key and then the value onto the stack,
- and call
- <PRE>
- void lua_settable (lua_State *L, int index);
- </PRE>
- where <code>index</code> points to the table.
- <code>lua_settable</code> pops from the stack both the key and the value.
- The table is left where it was in the stack.
- As in Lua, this operation may trigger a metamethod
- for the "settable" or "newindex" events.
- To set the real value of any table index,
- without invoking any metamethod,
- use the <em>raw</em> version:
- <PRE>
- void lua_rawset (lua_State *L, int index);
- </PRE>
- <p>You can traverse a table with the function
- <PRE>
- int lua_next (lua_State *L, int index);
- </PRE>
- where <code>index</code> points to the table to be traversed.
- The function pops a key from the stack,
- and pushes a key-value pair from the table
- (the "next" pair after the given key).
- If there are no more elements, then <code>lua_next</code> returns 0
- (and pushes nothing).
- Use a <B>nil</B> key to signal the start of a traversal.
- <p>A typical traversal looks like this:
- <PRE>
- /* table is in the stack at index `t' */
- lua_pushnil(L); /* first key */
- while (lua_next(L, t) != 0) {
- /* `key' is at index -2 and `value' at index -1 */
- printf("%s - %s\n",
- lua_typename(L, lua_type(L, -2)), lua_typename(L, lua_type(L, -1)));
- lua_pop(L, 1); /* removes `value'; keeps `key' for next iteration */
- }
- </PRE>
- <p>While traversing a table,
- do not call <code>lua_tostring</code> directly on a key,
- unless you know that the key is actually a string.
- Recall that <code>lua_tostring</code> <em>changes</em> the value at the given index;
- this confuses the next call to <code>lua_next</code>.
- <p><a name="globals"><a name="3.12"><h2>3.12 - Manipulating Environments</h2></a></a>
- <p>All global variables are kept in ordinary Lua tables,
- called environments.
- The initial environment is called the global environment.
- This table is always at pseudo-index <code>LUA_GLOBALSINDEX</code>.
- <p>To access and change the value of global variables,
- you can use regular table operations over an environment table.
- For instance, to access the value of a global variable, do
- <PRE>
- lua_pushstring(L, varname);
- lua_gettable(L, LUA_GLOBALSINDEX);
- </PRE>
- <p>You can change the global environment of a Lua thread using <code>lua_replace</code>.
- <p>The following functions get and set the environment of Lua functions:
- <PRE>
- void lua_getfenv (lua_State *L, int index);
- int lua_setfenv (lua_State *L, int index);
- </PRE>
- <code>lua_getfenv</code> pushes on the stack the environment table of
- the function at index <code>index</code> in the stack.
- If the function is a C function,
- <code>lua_getfenv</code> pushes the global environment.
- <code>lua_setfenv</code> pops a table from the stack and sets it as
- the new environment for the function at index <code>index</code> in the stack.
- If the object at the given index is not a Lua function,
- <code>lua_setfenv</code> returns 0.
- <p><a name="3.13"><h2>3.13 - Using Tables as Arrays</h2></a>
- The API has functions that help to use Lua tables as arrays,
- that is,
- tables indexed by numbers only:
- <PRE>
- void lua_rawgeti (lua_State *L, int index, int n);
- void lua_rawseti (lua_State *L, int index, int n);
- </PRE>
- <p><code>lua_rawgeti</code> pushes the value of the <em>n</em>-th element of the table
- at stack position <code>index</code>.
- <code>lua_rawseti</code> sets the value of the <em>n</em>-th element of the table
- at stack position <code>index</code> to the value at the top of the stack,
- removing this value from the stack.
- <p><a name="3.14"><h2>3.14 - Calling Functions</h2></a>
- <p>Functions defined in Lua
- and C functions registered in Lua
- can be called from the host program.
- This is done using the following protocol:
- First, the function to be called is pushed onto the stack;
- then, the arguments to the function are pushed
- in <em>direct order</em>, that is, the first argument is pushed first.
- Finally, the function is called using
- <PRE>
- void lua_call (lua_State *L, int nargs, int nresults);
- </PRE>
- <code>nargs</code> is the number of arguments that you pushed onto the stack.
- All arguments and the function value are popped from the stack,
- and the function results are pushed.
- The number of results are adjusted to <code>nresults</code>,
- unless <code>nresults</code> is <code>LUA_MULTRET</code>.
- In that case, <em>all</em> results from the function are pushed.
- Lua takes care that the returned values fit into the stack space.
- The function results are pushed onto the stack in direct order
- (the first result is pushed first),
- so that after the call the last result is on the top.
- <p>The following example shows how the host program may do the
- equivalent to this Lua code:
- <PRE>
- a = f("how", t.x, 14)
- </PRE>
- Here it is in C:
- <PRE>
- lua_pushstring(L, "t");
- lua_gettable(L, LUA_GLOBALSINDEX); /* global `t' (for later use) */
- lua_pushstring(L, "a"); /* var name */
- lua_pushstring(L, "f"); /* function name */
- lua_gettable(L, LUA_GLOBALSINDEX); /* function to be called */
- lua_pushstring(L, "how"); /* 1st argument */
- lua_pushstring(L, "x"); /* push the string "x" */
- lua_gettable(L, -5); /* push result of t.x (2nd arg) */
- lua_pushnumber(L, 14); /* 3rd argument */
- lua_call(L, 3, 1); /* call function with 3 arguments and 1 result */
- lua_settable(L, LUA_GLOBALSINDEX); /* set global variable `a' */
- lua_pop(L, 1); /* remove `t' from the stack */
- </PRE>
- Note that the code above is "balanced":
- at its end, the stack is back to its original configuration.
- This is considered good programming practice.
- <p>(We did this example using only the raw functions provided by Lua's API,
- to show all the details.
- Usually programmers define and use several macros and auxiliary functions
- that provide higher level access to Lua.
- See the source code of the standard libraries for examples.)
- <p><a name="lua_pcall"><a name="3.15"><h2>3.15 - Protected Calls</h2></a></a>
- <p>When you call a function with <code>lua_call</code>,
- any error inside the called function is propagated upwards
- (with a <code>longjmp</code>).
- If you need to handle errors,
- then you should use <code>lua_pcall</code>:
- <PRE>
- int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);
- </PRE>
- Both <code>nargs</code> and <code>nresults</code> have the same meaning as
- in <code>lua_call</code>.
- If there are no errors during the call,
- <code>lua_pcall</code> behaves exactly like <code>lua_call</code>.
- However, if there is any error,
- <code>lua_pcall</code> catches it,
- pushes a single value at the stack (the error message),
- and returns an error code.
- Like <code>lua_call</code>,
- <code>lua_pcall</code> always removes the function
- and its arguments from the stack.
- <p>If <code>errfunc</code> is 0,
- then the error message returned is exactly the original error message.
- Otherwise, <code>errfunc</code> gives the stack index for an
- <em>error handler function</em>.
- (In the current implementation, that index cannot be a pseudo-index.)
- In case of runtime errors,
- that function will be called with the error message
- and its return value will be the message returned by <code>lua_pcall</code>.
- <p>Typically, the error handler function is used to add more debug
- information to the error message, such as a stack traceback.
- Such information cannot be gathered after the return of <code>lua_pcall</code>,
- since by then the stack has unwound.
- <p>The <code>lua_pcall</code> function returns 0 in case of success
- or one of the following error codes
- (defined in <code>lua.h</code>):
- <ul>
- <li> <code>LUA_ERRRUN</code> --- a runtime error.
- <li> <code>LUA_ERRMEM</code> --- memory allocation error.
- For such errors, Lua does not call the error handler function.
- <li> <code>LUA_ERRERR</code> ---
- error while running the error handler function.
- </ul>
- <p><a name="LuacallC"><a name="3.16"><h2>3.16 - Defining C Functions</h2></a></a>
- <p>Lua can be extended with functions written in C.
- These functions must be of type <code>lua_CFunction</code>,
- which is defined as
- <PRE>
- typedef int (*lua_CFunction) (lua_State *L);
- </PRE>
- A C function receives a Lua state and returns an integer,
- the number of values it wants to return to Lua.
- <p>In order to communicate properly with Lua,
- a C function must follow the following protocol,
- which defines the way parameters and results are passed:
- A C function receives its arguments from Lua in its stack
- in direct order (the first argument is pushed first).
- So, when the function starts,
- its first argument (if any) is at index 1.
- To return values to Lua, a C function just pushes them onto the stack,
- in direct order (the first result is pushed first),
- and returns the number of results.
- Any other value in the stack below the results will be properly
- discharged by Lua.
- Like a Lua function, a C function called by Lua can also return
- many results.
- <p>As an example, the following function receives a variable number
- of numerical arguments and returns their average and sum:
- <PRE>
- static int foo (lua_State *L) {
- int n = lua_gettop(L); /* number of arguments */
- lua_Number sum = 0;
- int i;
- for (i = 1; i <= n; i++) {
- if (!lua_isnumber(L, i)) {
- lua_pushstring(L, "incorrect argument to function `average'");
- lua_error(L);
- }
- sum += lua_tonumber(L, i);
- }
- lua_pushnumber(L, sum/n); /* first result */
- lua_pushnumber(L, sum); /* second result */
- return 2; /* number of results */
- }
- </PRE>
- <p>To register a C function to Lua,
- there is the following convenience macro:
- <PRE>
- #define lua_register(L,n,f) \
- (lua_pushstring(L, n), \
- lua_pushcfunction(L, f), \
- lua_settable(L, LUA_GLOBALSINDEX))
- /* lua_State *L; */
- /* const char *n; */
- /* lua_CFunction f; */
- </PRE>
- which receives the name the function will have in Lua
- and a pointer to the function.
- Thus,
- the C function <code>foo</code> above may be registered in Lua as
- <code>average</code> by calling
- <PRE>
- lua_register(L, "average", foo);
- </PRE>
- <p><a name="c-closure"><a name="3.17"><h2>3.17 - Defining C Closures</h2></a></a>
- <p>When a C function is created,
- it is possible to associate some values with it,
- thus creating a <em>C closure</em>;
- these values are then accessible to the function whenever it is called.
- To associate values with a C function,
- first these values should be pushed onto the stack
- (when there are multiple values, the first value is pushed first).
- Then the function
- <PRE>
- void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
- </PRE>
- is used to push the C function onto the stack,
- with the argument <code>n</code> telling how many values should be
- associated with the function
- (<code>lua_pushcclosure</code> also pops these values from the stack);
- in fact, the macro <code>lua_pushcfunction</code> is defined as
- <code>lua_pushcclosure</code> with <code>n</code> set to 0.
- <p>Then, whenever the C function is called,
- those values are located at specific pseudo-indices.
- Those pseudo-indices are produced by a macro <code>lua_upvalueindex</code>.
- The first value associated with a function is at position
- <code>lua_upvalueindex(1)</code>, and so on.
- Any access to <code>lua_upvalueindex(<em>n</em>)</code>,
- where <em>n</em> is greater than the number of upvalues of the
- current function,
- produces an acceptable (but invalid) index.
- <p>For examples of C functions and closures,
- see the standard libraries in the official Lua distribution
- (<code>src/lib/*.c</code>).
- <p><a name="registry"><a name="3.18"><h2>3.18 - Registry</h2></a></a>
- <p>Lua provides a registry,
- a pre-defined table that can be used by any C code to
- store whatever Lua value it needs to store,
- specially if the C code needs to keep that Lua value
- outside the life span of a C function.
- This table is always located at pseudo-index
- <code>LUA_REGISTRYINDEX</code>.
- Any C library can store data into this table,
- as long as it chooses keys different from other libraries.
- Typically, you should use as key a string containing your library name
- or a light userdata with the address of a C object in your code.
- <p>The integer keys in the registry are used by the reference mechanism,
- implemented by the auxiliary library,
- and therefore should not be used by other purposes.
- <p><a name="3.19"><h2>3.19 - Error Handling in C</h2></a>
- <p>Internally, Lua uses the C <code>longjmp</code> facility to handle errors.
- When Lua faces any error
- (such as memory allocation errors, type errors, syntax errors)
- it <em>raises</em> an error, that is, it does a long jump.
- A <em>protected environment</em> uses <code>setjmp</code>
- to set a recover point;
- any error jumps to the most recent active recover point.
- <p>If an error happens outside any protected environment,
- Lua calls a <em>panic function</em>
- and then calls <code>exit(EXIT_FAILURE)</code>.
- You can change the panic function with
- <PRE>
- lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);
- </PRE>
- Your new panic function may avoid the application exit by
- never returning (e.g., by doing a long jump).
- Nevertheless, the corresponding Lua state will not be consistent;
- the only safe operation with it is to close it.
- <p>Almost any function in the API may raise an error,
- for instance due to a memory allocation error.
- The following functions run in protected mode
- (that is, they create a protected environment to run),
- so they never raise an error:
- <code>lua_open</code>, <code>lua_close</code>, <code>lua_load</code>,
- and <code>lua_pcall</code>.
- <p>There is yet another function that runs a given C function in protected mode:
- <PRE>
- int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);
- </PRE>
- <code>lua_cpcall</code> calls <code>func</code> in protected mode.
- <code>func</code> starts with only one element in its stack,
- a light userdata containing <code>ud</code>.
- In case of errors,
- <code>lua_cpcall</code> returns the same error codes as <code>lua_pcall</code>
- (see <a href="#lua_pcall">3.15</a>),
- plus the error object on the top of the stack;
- otherwise, it returns zero, and does not change the stack.
- Any value returned by <code>func</code> is discarded.
- <p>C code can generate a Lua error calling the function
- <PRE>
- void lua_error (lua_State *L);
- </PRE>
- The error message (which actually can be any type of object)
- must be on the stack top.
- This function does a long jump,
- and therefore never returns.
- <p><a name="3.20"><h2>3.20 - Threads</h2></a>
- <p>Lua offers partial support for multiple threads of execution.
- If you have a C library that offers multi-threading,
- then Lua can cooperate with it to implement the equivalent facility in Lua.
- Also, Lua implements its own coroutine system on top of threads.
- The following function creates a new thread in Lua:
- <PRE>
- lua_State *lua_newthread (lua_State *L);
- </PRE>
- This function pushes the thread on the stack and returns a pointer to
- a <code>lua_State</code> that represents this new thread.
- The new state returned by this function shares with the original state
- all global objects (such as tables),
- but has an independent run-time stack.
- <p>Each thread has an independent global environment table.
- When you create a thread, this table is the same as that of the given state,
- but you can change each one independently.
- <p>There is no explicit function to close or to destroy a thread.
- Threads are subject to garbage collection,
- like any Lua object.
- <p>To manipulate threads as coroutines,
- Lua offers the following functions:
- <PRE>
- int lua_resume (lua_State *L, int narg);
- int lua_yield (lua_State *L, int nresults);
- </PRE>
- To start a coroutine, you first create a new thread;
- then you push on its stack the body function plus any eventual arguments;
- then you call <code>lua_resume</code>,
- with <code>narg</code> being the number of arguments.
- This call returns when the coroutine suspends or finishes its execution.
- When it returns, the stack contains all values passed to <code>lua_yield</code>,
- or all values returned by the body function.
- <code>lua_resume</code> returns 0 if there are no errors running the coroutine,
- or an error code (see <a href="#lua_pcall">3.15</a>).
- In case of errors,
- the stack contains only the error message.
- To restart a coroutine, you put on its stack only the values to
- be passed as results from <code>yield</code>,
- and then call <code>lua_resume</code>.
- <p>The <code>lua_yield</code> function can only be called as the
- return expression of a C function, as follows:
- <PRE>
- return lua_yield (L, nresults);
- </PRE>
- When a C function calls <code>lua_yield</code> in that way,
- the running coroutine suspends its execution,
- and the call to <code>lua_resume</code> that started this coroutine returns.
- The parameter <code>nresults</code> is the number of values from the stack
- that are passed as results to <code>lua_resume</code>.
- <p>To exchange values between different threads,
- you may use <code>lua_xmove</code>:
- <PRE>
- void lua_xmove (lua_State *from, lua_State *to, int n);
- </PRE>
- It pops <code>n</code> values from the stack <code>from</code>,
- and puhses them into the stack <code>to</code>.
- <p>
- <a name="debugI"><a name="4"><h1>4 - The Debug Interface</h1></a></a>
- <p>Lua has no built-in debugging facilities.
- Instead, it offers a special interface
- by means of functions and <em>hooks</em>.
- This interface allows the construction of different
- kinds of debuggers, profilers, and other tools
- that need "inside information" from the interpreter.
- <p><a name="4.1"><h2>4.1 - Stack and Function Information</h2></a>
- <p>The main function to get information about the interpreter runtime stack is
- <PRE>
- int lua_getstack (lua_State *L, int level, lua_Debug *ar);
- </PRE>
- This function fills parts of a <code>lua_Debug</code> structure with
- an identification of the <em>activation record</em>
- of the function executing at a given level.
- Level 0 is the current running function,
- whereas level <em>n+1</em> is the function that has called level <em>n</em>.
- When there are no errors, <code>lua_getstack</code> returns 1;
- when called with a level greater than the stack depth,
- it returns 0.
- <p>The structure <code>lua_Debug</code> is used to carry different pieces of
- information about an active function:
- <PRE>
- typedef struct lua_Debug {
- int event;
- const char *name; /* (n) */
- const char *namewhat; /* (n) `global', `local', `field', `method' */
- const char *what; /* (S) `Lua' function, `C' function, Lua `main' */
- const char *source; /* (S) */
- int currentline; /* (l) */
- int nups; /* (u) number of upvalues */
- int linedefined; /* (S) */
- char short_src[LUA_IDSIZE]; /* (S) */
- /* private part */
- ...
- } lua_Debug;
- </PRE>
- <code>lua_getstack</code> fills only the private part
- of this structure, for later use.
- To fill the other fields of <code>lua_Debug</code> with useful information,
- call
- <PRE>
- int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
- </PRE>
- This function returns 0 on error
- (for instance, an invalid option in <code>what</code>).
- Each character in the string <code>what</code>
- selects some fields of the structure <code>ar</code> to be filled,
- as indicated by the letter in parentheses in the definition of <code>lua_Debug</code>
- above:
- `<code>S</code>´ fills in the fields <code>source</code>, <code>linedefined</code>,
- and <code>what</code>;
- `<code>l</code>´ fills in the field <code>currentline</code>, etc.
- Moreover, `<code>f</code>´ pushes onto the stack the function that is
- running at the given level.
- <p>To get information about a function that is not active
- (that is, not in the stack),
- you push it onto the stack
- and start the <code>what</code> string with the character `<code>></code>´.
- For instance, to know in which line a function <code>f</code> was defined,
- you can write
- <PRE>
- lua_Debug ar;
- lua_pushstring(L, "f");
- lua_gettable(L, LUA_GLOBALSINDEX); /* get global `f' */
- lua_getinfo(L, ">S", &ar);
- printf("%d\n", ar.linedefined);
- </PRE>
- The fields of <code>lua_Debug</code> have the following meaning:
- <ul>
- <p><li><b><code>source</code></b>
- If the function was defined in a string,
- then <code>source</code> is that string.
- If the function was defined in a file,
- then <code>source</code> starts with a `<code>@</code>´ followed by the file name.
- <p><li><b><code>short_src</code></b>
- A "printable" version of <code>source</code>, to be used in error messages.
- <p><li><b><code>linedefined</code></b>
- the line number where the definition of the function starts.
- <p><li><b><code>what</code></b> the string <code>"Lua"</code> if this is a Lua function,
- <code>"C"</code> if this is a C function,
- <code>"main"</code> if this is the main part of a chunk,
- and <code>"tail"</code> if this was a function that did a tail call.
- In the latter case,
- Lua has no other information about this function.
- <p><li><b><code>currentline</code></b>
- the current line where the given function is executing.
- When no line information is available,
- <code>currentline</code> is set to <em>-1</em>.
- <p><li><b><code>name</code></b>
- a reasonable name for the given function.
- Because functions in Lua are first class values,
- they do not have a fixed name:
- Some functions may be the value of multiple global variables,
- while others may be stored only in a table field.
- The <code>lua_getinfo</code> function checks how the function was
- called or whether it is the value of a global variable to
- find a suitable name.
- If it cannot find a name,
- then <code>name</code> is set to <code>NULL</code>.
- <p><li><b><code>namewhat</code></b>
- Explains the <code>name</code> field.
- The value of <code>namewhat</code> can be
- <code>"global"</code>, <code>"local"</code>, <code>"method"</code>,
- <code>"field"</code>, or <code>""</code> (the empty string),
- according to how the function was called.
- (Lua uses the empty string when no other option seems to apply.)
- <p><li><b><code>nups</code></b>
- The number of upvalues of the function.
- <p></ul>
- <p><a name="4.2"><h2>4.2 - Manipulating Local Variables and Upvalues</h2></a>
- <p>For the manipulation of local variables and upvalues,
- the debug interface uses indices:
- The first parameter or local variable has index 1, and so on,
- until the last active local variable.
- Upvalues have no particular order,
- as they are active through the whole function.
- <p>The following functions allow the manipulation of the
- local variables of a given activation record:
- <PRE>
- const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n);
- const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n);
- </PRE>
- The parameter <code>ar</code> must be a valid activation record that was
- filled by a previous call to <code>lua_getstack</code> or
- given as argument to a hook (see <a href="#sub-hooks">4.3</a>).
- <code>lua_getlocal</code> gets the index <code>n</code> of a local variable,
- pushes the variable's value onto the stack,
- and returns its name.
- <code>lua_setlocal</code> assigns the value at the top of the stack
- to the variable and returns its name.
- Both functions return <code>NULL</code>
- when the index is greater than
- the number of active local variables.
- <p>The following functions allow the manipulation of the
- upvalues of a given function
- (unlike local variables,
- the upvalues of a function are accessible even when the
- function is not active):
- <PRE>
- const char *lua_getupvalue (lua_State *L, int funcindex, int n);
- const char *lua_setupvalue (lua_State *L, int funcindex, int n);
- </PRE>
- These functions operate both on Lua functions and on C functions.
- (For Lua functions,
- upvalues are the external local variables that the function uses,
- and that consequently are included in its closure.)
- <code>funcindex</code> points to a function in the stack.
- <code>lua_getupvalue</code> gets the index <code>n</code> of an upvalue,
- pushes the upvalue's value onto the stack,
- and returns its name.
- <code>lua_setupvalue</code> assigns the value at the top of the stack
- to the upvalue and returns its name.
- Both functions return <code>NULL</code>
- when the index is greater than the number of upvalues.
- For C functions, these functions use the empty string <code>""</code>
- as a name for all upvalues.
- <p>As an example, the following function lists the names of all
- local variables and upvalues for a function at a given level of the stack:
- <PRE>
- int listvars (lua_State *L, int level) {
- lua_Debug ar;
- int i;
- const char *name;
- if (lua_getstack(L, level, &ar) == 0)
- return 0; /* failure: no such level in the stack */
- i = 1;
- while ((name = lua_getlocal(L, &ar, i++)) != NULL) {
- printf("local %d %s\n", i-1, name);
- lua_pop(L, 1); /* remove variable value */
- }
- lua_getinfo(L, "f", &ar); /* retrieves function */
- i = 1;
- while ((name = lua_getupvalue(L, -1, i++)) != NULL) {
- printf("upvalue %d %s\n", i-1, name);
- lua_pop(L, 1); /* remove upvalue value */
- }
- return 1;
- }
- </PRE>
- <p><a name="sub-hooks"><a name="4.3"><h2>4.3 - Hooks</h2></a></a>
- <p>Lua offers a mechanism of hooks, which are
- user-defined C functions that are called during the program execution.
- A hook may be called in four different events:
- a <em>call</em> event, when Lua calls a function;
- a <em>return</em> event, when Lua returns from a function;
- a <em>line</em> event, when Lua starts executing a new line of code;
- and a <em>count</em> event, which happens every "count" instructions.
- Lua identifies these events with the following constants:
- <code>LUA_HOOKCALL</code>,
- <code>LUA_HOOKRET</code> (or <code>LUA_HOOKTAILRET</code>, see below),
- <code>LUA_HOOKLINE</code>,
- and <code>LUA_HOOKCOUNT</code>.
- <p>A hook has type <code>lua_Hook</code>, defined as follows:
- <PRE>
- typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
- </PRE>
- You can set the hook with the following function:
- <PRE>
- int lua_sethook (lua_State *L, lua_Hook func, int mask, int count);
- </PRE>
- <code>func</code> is the hook.
- <code>mask</code> specifies on which events the hook will be called:
- It is formed by a disjunction of the constants
- <code>LUA_MASKCALL</code>,
- <code>LUA_MASKRET</code>,
- <code>LUA_MASKLINE</code>,
- and <code>LUA_MASKCOUNT</code>.
- The <code>count</code> argument is only meaningful when the mask
- includes <code>LUA_MASKCOUNT</code>.
- For each event, the hook is called as explained below:
- <ul>
- <li><b>The call hook</b> is called when the interpreter calls a function.
- The hook is called just after Lua enters the new function.
- <li><b>The return hook</b> is called when the interpreter returns from a function.
- The hook is called just before Lua leaves the function.
- <li><b>The line hook</b> is called when the interpreter is about to
- start the execution of a new line of code,
- or when it jumps back in the code (even to the same line).
- (This event only happens while Lua is executing a Lua function.)
- <li><b>The count hook</b> is called after the interpreter executes every
- <code>count</code> instructions.
- (This event only happens while Lua is executing a Lua function.)
- </ul>
- <p>A hook is disabled by setting <code>mask</code> to zero.
- <p>You can get the current hook, the current mask,
- and the current count with the following functions:
- <PRE>
- lua_Hook lua_gethook (lua_State *L);
- int lua_gethookmask (lua_State *L);
- int lua_gethookcount (lua_State *L);
- </PRE>
- <p>Whenever a hook is called, its <code>ar</code> argument has its field
- <code>event</code> set to the specific event that triggered the hook.
- Moreover, for line events, the field <code>currentline</code> is also set.
- To get the value of any other field in <code>ar</code>,
- the hook must call <code>lua_getinfo</code>.
- For return events, <code>event</code> may be <code>LUA_HOOKRET</code>,
- the normal value, or <code>LUA_HOOKTAILRET</code>.
- In the latter case, Lua is simulating a return from
- a function that did a tail call;
- in this case, it is useless to call <code>lua_getinfo</code>.
- <p>While Lua is running a hook, it disables other calls to hooks.
- Therefore, if a hook calls back Lua to execute a function or a chunk,
- that execution occurs without any calls to hooks.
- <p>
- <a name="libraries"><a name="5"><h1>5 - Standard Libraries</h1></a></a>
- <p>The standard libraries provide useful functions
- that are implemented directly through the C API.
- Some of these functions provide essential services to the language
- (e.g., <code>type</code> and <code>getmetatable</code>);
- others provide access to "outside" services (e.g., I/O);
- and others could be implemented in Lua itself,
- but are quite useful or have critical performance to
- deserve an implementation in C (e.g., <code>sort</code>).
- <p>All libraries are implemented through the official C API
- and are provided as separate C modules.
- Currently, Lua has the following standard libraries:
- <ul>
- <li> basic library;
- <li> string manipulation;
- <li> table manipulation;
- <li> mathematical functions (sin, log, etc.);
- <li> input and output;
- <li> operating system facilities;
- <li> debug facilities.
- </ul>
- Except for the basic library,
- each library provides all its functions as fields of a global table
- or as methods of its objects.
- <p>To have access to these libraries,
- the C host program must first call the functions
- <code>luaopen_base</code> (for the basic library),
- <code>luaopen_string</code> (for the string library),
- <code>luaopen_table</code> (for the table library),
- <code>luaopen_math</code> (for the mathematical library),
- <code>luaopen_io</code> (for the I/O and the Operating System libraries),
- and <code>luaopen_debug</code> (for the debug library).
- These functions are declared in <code>lualib.h</code>.
- <p><a name="predefined"><a name="5.1"><h2>5.1 - Basic Functions</h2></a></a>
- <p>The basic library provides some core functions to Lua.
- If you do not include this library in your application,
- you should check carefully whether you need to provide some alternative
- implementation for some of its facilities.
- <p><h3><code>assert (v [, message])</code></h3>
- Issues an error when
- the value of its argument <code>v</code> is <B>nil</B> or <B>false</B>;
- otherwise, returns this value.
- <code>message</code> is an error message;
- when absent, it defaults to "assertion failed!"
- <p><h3><code>collectgarbage ([limit])</code></h3>
- <p>Sets the garbage-collection threshold to the given limit
- (in Kbytes) and checks it against the byte counter.
- If the new threshold is smaller than the byte counter,
- then Lua immediately runs the garbage collector (see <a href="#GC">2.9</a>).
- If <code>limit</code> is absent, it defaults to zero
- (thus forcing a garbage-collection cycle).
- <p><h3><code>dofile (filename)</code></h3>
- Opens the named file and executes its contents as a Lua chunk.
- When called without arguments,
- <code>dofile</code> executes the contents of the standard input (<code>stdin</code>).
- Returns any value returned by the chunk.
- In case of errors, <code>dofile</code> propagates the error
- to its caller (that is, it does not run in protected mode).
- <p><a name="pdf-error"><h3><code>error (message [, level])</code></h3></a>
- Terminates the last protected function called
- and returns <code>message</code> as the error message.
- Function <code>error</code> never returns.
- <p>The <code>level</code> argument specifies where the error
- message points the error.
- With level 1 (the default), the error position is where the
- <code>error</code> function was called.
- Level 2 points the error to where the function
- that called <code>error</code> was called; and so on.
- <p><h3><code>_G</code></h3>
- A global variable (not a function) that
- holds the global environment (that is, <code>_G._G = _G</code>).
- Lua itself does not use this variable;
- changing its value does not affect any environment.
- (Use <code>setfenv</code> to change environments.)
- <p><h3><code>getfenv (f)</code></h3>
- Returns the current environment in use by the function.
- <code>f</code> can be a Lua function or a number,
- which specifies the function at that stack level:
- Level 1 is the function calling <code>getfenv</code>.
- If the given function is not a Lua function,
- or if <code>f</code> is 0,
- <code>getfenv</code> returns the global environment.
- The default for <code>f</code> is 1.
- <p>If the environment has a <code>"__fenv"</code> field,
- returns the associated value, instead of the environment.
- <p><a name="pdf-getmetatable"><h3><code>getmetatable (object)</code></h3></a>
- <p>If the object does not have a metatable, returns <B>nil</B>.
- Otherwise,
- if the object's metatable has a <code>"__metatable"</code> field,
- returns the associated value.
- Otherwise, returns the metatable of the given object.
- <p><h3><code>gcinfo ()</code></h3>
- <p>Returns two results:
- the number of Kbytes of dynamic memory that Lua is using
- and the current garbage collector threshold (also in Kbytes).
- <p><h3><code>ipairs (t)</code></h3>
- <p>Returns an iterator function, the table <code>t</code>, and 0,
- so that the construction
- <PRE>
- for i,v in ipairs(t) do ... end
- </PRE>
- will iterate over the pairs (<code>1,t[1]</code>), (<code>2,t[2]</code>), ...,
- up to the first integer key with a nil value in the table.
- <p><h3><code>loadfile (filename)</code></h3>
- <p>Loads a file as a Lua chunk (without running it).
- If there are no errors,
- returns the compiled chunk as a function;
- otherwise, returns <B>nil</B> plus the error message.
- The environment of the returned function is the global environment.
- <p><h3><code>loadlib (libname, funcname)</code></h3>
- <p>Links the program with the dynamic C library <code>libname</code>.
- Inside this library, looks for a function <code>funcname</code>
- and returns this function as a C function.
- <p><code>libname</code> must be the complete file name of the C library,
- including any eventual path and extension.
- <p>This function is not supported by ANSI C.
- As such, it is only available on some platforms
- (Windows, Linux, Solaris, BSD, plus other Unix systems that
- support the <code>dlfcn</code> standard).
- <p><h3><code>loadstring (string [, chunkname])</code></h3>
- Loads a string as a Lua chunk (without running it).
- If there are no errors,
- returns the compiled chunk as a function;
- otherwise, returns <B>nil</B> plus the error message.
- The environment of the returned function is the global environment.
- <p>The optional parameter <code>chunkname</code>
- is the name to be used in error messages and debug information.
- <p>To load and run a given string, use the idiom
- <PRE>
- assert(loadstring(s))()
- </PRE>
- <p><h3><code>next (table [, index])</code></h3>
- Allows a program to traverse all fields of a table.
- Its first argument is a table and its second argument
- is an index in this table.
- <code>next</code> returns the next index of the table and the
- value associated with the index.
- When called with <B>nil</B> as its second argument,
- <code>next</code> returns the first index
- of the table and its associated value.
- When called with the last index,
- or with <B>nil</B> in an empty table,
- <code>next</code> returns <B>nil</B>.
- If the second argument is absent, then it is interpreted as <B>nil</B>.
- <p>Lua has no declaration of fields;
- There is no difference between a
- field not present in a table or a field with value <B>nil</B>.
- Therefore, <code>next</code> only considers fields with non-<B>nil</B> values.
- The order in which the indices are enumerated is not specified,
- <em>even for numeric indices</em>.
- (To traverse a table in numeric order,
- use a numerical <b>for</b> or the <code>ipairs</code> function.)
- <p>The behavior of <code>next</code> is <em>undefined</em> if,
- during the traversal,
- you assign any value to a non-existent field in the table.
- <p><h3><code>pairs (t)</code></h3>
- <p>Returns the <code>next</code> function and the table <code>t</code> (plus a <B>nil</B>),
- so that the construction
- <PRE>
- for k,v in pairs(t) do ... end
- </PRE>
- will iterate over all key-value pairs of table <code>t</code>.
- <p><a name="pdf-pcall"><h3><code>pcall (f, arg1, arg2, ...)</code></h3></a>
- <p>Calls function <code>f</code> with
- the given arguments in protected mode.
- That means that any error inside <code>f</code> is not propagated;
- instead, <code>pcall</code> catches the error
- and returns a status code.
- Its first result is the status code (a boolean),
- which is <B>true</B> if the call succeeds without errors.
- In such case, <code>pcall</code> also returns all results from the call,
- after this first result.
- In case of any error, <code>pcall</code> returns <B>false</B> plus the error message.
- <p><h3><code>print (e1, e2, ...)</code></h3>
- Receives any number of arguments,
- and prints their values in <code>stdout</code>,
- using the <code>tostring</code> function to convert them to strings.
- This function is not intended for formatted output,
- but only as a quick way to show a value,
- typically for debugging.
- For formatted output, use <code>format</code> (see <a href="#format">5.3</a>).
- <p><h3><code>rawequal (v1, v2)</code></h3>
- Checks whether <code>v1</code> is equal to <code>v2</code>,
- without invoking any metamethod.
- Returns a boolean.
- <p><h3><code>rawget (table, index)</code></h3>
- Gets the real value of <code>table[index]</code>,
- without invoking any metamethod.
- <code>table</code> must be a table;
- <code>index</code> is any value different from <B>nil</B>.
- <p><h3><code>rawset (table, index, value)</code></h3>
- Sets the real value of <code>table[index]</code> to <code>value</code>,
- without invoking any metamethod.
- <code>table</code> must be a table,
- <code>index</code> is any value different from <B>nil</B>,
- and <code>value</code> is any Lua value.
- <p><h3><code>require (packagename)</code></h3>
- <p>Loads the given package.
- The function starts by looking into the table <code>_LOADED</code>
- to determine whether <code>packagename</code> is already loaded.
- If it is, then <code>require</code> returns the value that the package
- returned when it was first loaded.
- Otherwise, it searches a path looking for a file to load.
- <p>If the global variable <code>LUA_PATH</code> is a string,
- this string is the path.
- Otherwise, <code>require</code> tries the environment variable <code>LUA_PATH</code>.
- As a last resort, it uses the predefined path <code>"?;?.lua"</code>.
- <p>The path is a sequence of <em>templates</em> separated by semicolons.
- For each template, <code>require</code> will change each interrogation
- mark in the template to <code>packagename</code>,
- and then will try to load the resulting file name.
- So, for instance, if the path is
- <PRE>
- "./?.lua;./?.lc;/usr/local/?/?.lua;/lasttry"
- </PRE>
- a <code>require "mod"</code> will try to load the files
- <code>./mod.lua</code>,
- <code>./mod.lc</code>,
- <code>/usr/local/mod/mod.lua</code>,
- and <code>/lasttry</code>, in that order.
- <p>The function stops the search as soon as it can load a file,
- and then it runs the file.
- After that, it associates, in table <code>_LOADED</code>,
- the package name with the value that the package returned,
- and returns that value.
- If the package returns <B>nil</B> (or no value),
- <code>require</code> converts this value to <B>true</B>.
- If the package returns <B>false</B>,
- <code>require</code> also returns <B>false</B>.
- However, as the mark in table <code>_LOADED</code> is <B>false</B>,
- any new attempt to reload the file
- will happen as if the package was not loaded
- (that is, the package will be loaded again).
- <p>If there is any error loading or running the file,
- or if it cannot find any file in the path,
- then <code>require</code> signals an error.
- <p>While running a file,
- <code>require</code> defines the global variable <code>_REQUIREDNAME</code>
- with the package name.
- The package being loaded always runs within the global environment.
- <p><a name="setfenv"><h3><code>setfenv (f, table)</code></h3></a>
- <p>Sets the current environment to be used by the given function.
- <code>f</code> can be a Lua function or a number,
- which specifies the function at that stack level:
- Level 1 is the function calling <code>setfenv</code>.
- <p>As a special case, when <code>f</code> is 0 <code>setfenv</code> changes
- the global environment of the running thread.
- <p>If the original environment has a <code>"__fenv"</code> field,
- <code>setfenv</code> raises an error.
- <p><h3><code>setmetatable (table, metatable)</code></h3>
- <p>Sets the metatable for the given table.
- (You cannot change the metatable of a userdata from Lua.)
- If <code>metatable</code> is <B>nil</B>, removes the metatable of the given table.
- If the original metatable has a <code>"__metatable"</code> field,
- raises an error.
- <p><h3><code>tonumber (e [, base])</code></h3>
- Tries to convert its argument to a number.
- If the argument is already a number or a string convertible
- to a number, then <code>tonumber</code> returns that number;
- otherwise, it returns <B>nil</B>.
- <p>An optional argument specifies the base to interpret the numeral.
- The base may be any integer between 2 and 36, inclusive.
- In bases above 10, the letter `<code>A</code>´ (in either upper or lower case)
- represents 10, `<code>B</code>´ represents 11, and so forth,
- with `<code>Z</code>´ representing 35.
- In base 10 (the default), the number may have a decimal part,
- as well as an optional exponent part (see <a href="#coercion">2.2.1</a>).
- In other bases, only unsigned integers are accepted.
- <p><h3><code>tostring (e)</code></h3>
- Receives an argument of any type and
- converts it to a string in a reasonable format.
- For complete control of how numbers are converted,
- use <code>format</code> (see <a href="#format">5.3</a>).
- <p>If the metatable of <code>e</code> has a <code>"__tostring"</code> field,
- <code>tostring</code> calls the corresponding value
- with <code>e</code> as argument,
- and uses the result of the call as its result.
- <p><a name="pdf-type"><h3><code>type (v)</code></h3></a>
- Returns the type of its only argument, coded as a string.
- The possible results of this function are
- <code>"nil"</code> (a string, not the value <B>nil</B>),
- <code>"number"</code>,
- <code>"string"</code>,
- <code>"boolean</code>,
- <code>"table"</code>,
- <code>"function"</code>,
- <code>"thread"</code>,
- and <code>"userdata"</code>.
- <p><h3><code>unpack (list)</code></h3>
- Returns all elements from the given list.
- This function is equivalent to
- <PRE>
- return list[1], list[2], ..., list[n]
- </PRE>
- except that the above code can be written only for a fixed <em>n</em>.
- The number <em>n</em> is the size of the list,
- as defined for the <code>table.getn</code> function.
- <p><h3><code>_VERSION</code></h3>
- A global variable (not a function) that
- holds a string containing the current interpreter version.
- The current content of this string is <code>"Lua 5.0"</code>.
- <p><h3><code>xpcall (f, err)</code></h3>
- <p>This function is similar to <code>pcall</code>,
- except that you can set a new error handler.
- <p><code>xpcall</code> calls function <code>f</code> in protected mode,
- using <code>err</code> as the error handler.
- Any error inside <code>f</code> is not propagated;
- instead, <code>xpcall</code> catches the error,
- calls the <code>err</code> function with the original error object,
- and returns a status code.
- Its first result is the status code (a boolean),
- which is true if the call succeeds without errors.
- In such case, <code>xpcall</code> also returns all results from the call,
- after this first result.
- In case of any error,
- <code>xpcall</code> returns false plus the result from <code>err</code>.
- <p><a name="5.2"><h2>5.2 - Coroutine Manipulation</h2></a>
- <p>The operations related to coroutines comprise a sub-library of
- the basic library and come inside the table <code>coroutine</code>.
- See <a href="#coroutine">2.10</a> for a general description of coroutines.
- <p><h3><code>coroutine.create (f)</code></h3>
- <p>Creates a new coroutine, with body <code>f</code>.
- <code>f</code> must be a Lua function.
- Returns this new coroutine,
- an object with type <code>"thread"</code>.
- <p><h3><code>coroutine.resume (co, val1, ...)</code></h3>
- <p>Starts or continues the execution of coroutine <code>co</code>.
- The first time you resume a coroutine,
- it starts running its body.
- The arguments <code>val1</code>, ... go as the arguments to the body function.
- If the coroutine has yielded,
- <code>resume</code> restarts it;
- the arguments <code>val1</code>, ... go as the results from the yield.
- <p>If the coroutine runs without any errors,
- <code>resume</code> returns <B>true</B> plus any values passed to <code>yield</code>
- (if the coroutine yields) or any values returned by the body function
- (if the coroutine terminates).
- If there is any error,
- <code>resume</code> returns <B>false</B> plus the error message.
- <p><h3><code>coroutine.status (co)</code></h3>
- <p>Returns the status of coroutine <code>co</code>, as a string:
- <code>"running"</code>,
- if the coroutine is running (that is, it called <code>status</code>);
- <code>"suspended"</code>, if the coroutine is suspended in a call to <code>yield</code>,
- or if it has not started running yet;
- and <code>"dead"</code> if the coroutine has finished its body function,
- or if it has stopped with an error.
- <p><h3><code>coroutine.wrap (f)</code></h3>
- <p>Creates a new coroutine, with body <code>f</code>.
- <code>f</code> must be a Lua function.
- Returns a function that resumes the coroutine each time it is called.
- Any arguments passed to the function behave as the
- extra arguments to <code>resume</code>.
- Returns the same values returned by <code>resume</code>,
- except the first boolean.
- In case of error, propagates the error.
- <p><h3><code>coroutine.yield (val1, ...)</code></h3>
- <p>Suspends the execution of the calling coroutine.
- The coroutine cannot be running neither a C function,
- nor a metamethod, nor an iterator.
- Any arguments to <code>yield</code> go as extra results to <code>resume</code>.
- <p><a name="5.3"><h2>5.3 - String Manipulation</h2></a>
- This library provides generic functions for string manipulation,
- such as finding and extracting substrings, and pattern matching.
- When indexing a string in Lua, the first character is at position 1
- (not at 0, as in C).
- Indices are allowed to be negative and are interpreted as indexing backwards,
- from the end of the string.
- Thus, the last character is at position <em>-1</em>, and so on.
- <p>The string library provides all its functions inside the table
- <code>string</code>.
- <p><h3><code>string.byte (s [, i])</code></h3>
- Returns the internal numerical code of the <code>i</code>-th character of <code>s</code>,
- or <B>nil</B> if the index is out of range.
- If <code>i</code> is absent, then it is assumed to be 1.
- <code>i</code> may be negative.
- <p>Note that numerical codes are not necessarily portable across platforms.
- <p><h3><code>string.char (i1, i2, ...)</code></h3>
- Receives 0 or more integers.
- Returns a string with length equal to the number of arguments,
- in which each character has the internal numerical code equal
- to its correspondent argument.
- <p>Note that numerical codes are not necessarily portable across platforms.
- <p><h3><code>string.dump (function)</code></h3>
- <p>Returns a binary representation of the given function,
- so that a later <code>loadstring</code> on that string returns
- a copy of the function.
- <code>function</code> must be a Lua function without upvalues.
- <p><h3><code>string.find (s, pattern [, init [, plain]])</code></h3>
- Looks for the first <em>match</em> of
- <code>pattern</code> in the string <code>s</code>.
- If it finds one, then <code>find</code> returns the indices of <code>s</code>
- where this occurrence starts and ends;
- otherwise, it returns <B>nil</B>.
- If the pattern specifies captures (see <code>string.gsub</code> below),
- the captured strings are returned as extra results.
- A third, optional numerical argument <code>init</code> specifies
- where to start the search;
- it may be negative and its default value is 1.
- A value of <B>true</B> as a fourth, optional argument <code>plain</code>
- turns off the pattern matching facilities,
- so the function does a plain "find substring" operation,
- with no characters in <code>pattern</code> being considered "magic".
- Note that if <code>plain</code> is given, then <code>init</code> must be given too.
- <p><h3><code>string.len (s)</code></h3>
- Receives a string and returns its length.
- The empty string <code>""</code> has length 0.
- Embedded zeros are counted,
- so <code>"a\000b\000c"</code> has length 5.
- <p><h3><code>string.lower (s)</code></h3>
- Receives a string and returns a copy of that string with all
- uppercase letters changed to lowercase.
- All other characters are left unchanged.
- The definition of what is an uppercase letter depends on the current locale.
- <p><h3><code>string.rep (s, n)</code></h3>
- Returns a string that is the concatenation of <code>n</code> copies of
- the string <code>s</code>.
- <p><h3><code>string.sub (s, i [, j])</code></h3>
- Returns the substring of <code>s</code> that
- starts at <code>i</code> and continues until <code>j</code>;
- <code>i</code> and <code>j</code> may be negative.
- If <code>j</code> is absent, then it is assumed to be equal to <em>-1</em>
- (which is the same as the string length).
- In particular,
- the call <code>string.sub(s,1,j)</code> returns a prefix of <code>s</code>
- with length <code>j</code>,
- and <code>string.sub(s, -i)</code> returns a suffix of <code>s</code>
- with length <code>i</code>.
- <p><h3><code>string.upper (s)</code></h3>
- Receives a string and returns a copy of that string with all
- lowercase letters changed to uppercase.
- All other characters are left unchanged.
- The definition of what is a lowercase letter depends on the current locale.
- <p><a name="format"><h3><code>string.format (formatstring, e1, e2, ...)</code></h3></a>
- Returns a formatted version of its variable number of arguments
- following the description given in its first argument (which must be a string).
- The format string follows the same rules as the <code>printf</code> family of
- standard C functions.
- The only differences are that the options/modifiers
- <code>*</code>, <code>l</code>, <code>L</code>, <code>n</code>, <code>p</code>,
- and <code>h</code> are not supported,
- and there is an extra option, <code>q</code>.
- The <code>q</code> option formats a string in a form suitable to be safely read
- back by the Lua interpreter:
- The string is written between double quotes,
- and all double quotes, newlines, and backslashes in the string
- are correctly escaped when written.
- For instance, the call
- <PRE>
- string.format('%q', 'a string with "quotes" and \n new line')
- </PRE>
- will produce the string:
- <PRE>
- "a string with \"quotes\" and \
- new line"
- </PRE>
- <p>The options <code>c</code>, <code>d</code>, <code>E</code>, <code>e</code>, <code>f</code>,
- <code>g</code>, <code>G</code>, <code>i</code>, <code>o</code>, <code>u</code>, <code>X</code>, and <code>x</code> all
- expect a number as argument,
- whereas <code>q</code> and <code>s</code> expect a string.
- The <code>*</code> modifier can be simulated by building
- the appropriate format string.
- For example, <code>"%*g"</code> can be simulated with
- <code>"%"..width.."g"</code>.
- <p>String values to be formatted with
- <code>%s</code> cannot contain embedded zeros.
- <p><h3><code>string.gfind (s, pat)</code></h3>
- <p>Returns an iterator function that,
- each time it is called,
- returns the next captures from pattern <code>pat</code> over string <code>s</code>.
- <p>If <code>pat</code> specifies no captures,
- then the whole match is produced in each call.
- <p>As an example, the following loop
- <PRE>
- s = "hello world from Lua"
- for w in string.gfind(s, "%a+") do
- print(w)
- end
- </PRE>
- will iterate over all the words from string <code>s</code>,
- printing one per line.
- The next example collects all pairs <code>key=value</code> from the
- given string into a table:
- <PRE>
- t = {}
- s = "from=world, to=Lua"
- for k, v in string.gfind(s, "(%w+)=(%w+)") do
- t[k] = v
- end
- </PRE>
- <p><h3><code>string.gsub (s, pat, repl [, n])</code></h3>
- Returns a copy of <code>s</code>
- in which all occurrences of the pattern <code>pat</code> have been
- replaced by a replacement string specified by <code>repl</code>.
- <code>gsub</code> also returns, as a second value,
- the total number of substitutions made.
- <p>If <code>repl</code> is a string, then its value is used for replacement.
- Any sequence in <code>repl</code> of the form <code>%</code><em>n</em>,
- with <em>n</em> between 1 and 9,
- stands for the value of the <em>n</em>-th captured substring (see below).
- <p>If <code>repl</code> is a function, then this function is called every time a
- match occurs, with all captured substrings passed as arguments,
- in order;
- if the pattern specifies no captures,
- then the whole match is passed as a sole argument.
- If the value returned by this function is a string,
- then it is used as the replacement string;
- otherwise, the replacement string is the empty string.
- <p>The optional last parameter <code>n</code> limits
- the maximum number of substitutions to occur.
- For instance, when <code>n</code> is 1 only the first occurrence of
- <code>pat</code> is replaced.
- <p>Here are some examples:
- <PRE>
- x = string.gsub("hello world", "(%w+)", "%1 %1")
- --> x="hello hello world world"
- x = string.gsub("hello world", "(%w+)", "%1 %1", 1)
- --> x="hello hello world"
- x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
- --> x="world hello Lua from"
- x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
- --> x="home = /home/roberto, user = roberto"
- x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
- return loadstring(s)()
- end)
- --> x="4+5 = 9"
- local t = {name="lua", version="5.0"}
- x = string.gsub("$name_$version.tar.gz", "%$(%w+)", function (v)
- return t[v]
- end)
- --> x="lua_5.0.tar.gz"
- </PRE>
- <p><a name="pm"><h3>Patterns</h3></a>
- <p><p>
- A <em>character class</em> is used to represent a set of characters.
- The following combinations are allowed in describing a character class:
- <ul>
- <li><b><em>x</em></b> (where <em>x</em> is not one of the magic characters
- <code>^$()%.[]*+-?</code>)
- --- represents the character <em>x</em> itself.
- <li><b><code>.</code></b> --- (a dot) represents all characters.
- <li><b><code>%a</code></b> --- represents all letters.
- <li><b><code>%c</code></b> --- represents all control characters.
- <li><b><code>%d</code></b> --- represents all digits.
- <li><b><code>%l</code></b> --- represents all lowercase letters.
- <li><b><code>%p</code></b> --- represents all punctuation characters.
- <li><b><code>%s</code></b> --- represents all space characters.
- <li><b><code>%u</code></b> --- represents all uppercase letters.
- <li><b><code>%w</code></b> --- represents all alphanumeric characters.
- <li><b><code>%x</code></b> --- represents all hexadecimal digits.
- <li><b><code>%z</code></b> --- represents the character with representation 0.
- <li><b><code>%<em>x</em></code></b> (where <em>x</em> is any non-alphanumeric character) ---
- represents the character <em>x</em>.
- This is the standard way to escape the magic characters.
- Any punctuation character (even the non magic)
- can be preceded by a `<code>%</code>´
- when used to represent itself in a pattern.
- <p><li><b><code>[<em>set</em>]</code></b> ---
- represents the class which is the union of all
- characters in <em>set</em>.
- A range of characters may be specified by
- separating the end characters of the range with a `<code>-</code>´.
- All classes <code>%</code><em>x</em> described above may also be used as
- components in <em>set</em>.
- All other characters in <em>set</em> represent themselves.
- For example, <code>[%w_]</code> (or <code>[_%w]</code>)
- represents all alphanumeric characters plus the underscore,
- <code>[0-7]</code> represents the octal digits,
- and <code>[0-7%l%-]</code> represents the octal digits plus
- the lowercase letters plus the `<code>-</code>´ character.
- <p>The interaction between ranges and classes is not defined.
- Therefore, patterns like <code>[%a-z]</code> or <code>[a-%%]</code>
- have no meaning.
- <p><li><b><code>[^<em>set</em>]</code></b> ---
- represents the complement of <em>set</em>,
- where <em>set</em> is interpreted as above.
- </ul>
- For all classes represented by single letters (<code>%a</code>, <code>%c</code>, etc.),
- the corresponding uppercase letter represents the complement of the class.
- For instance, <code>%S</code> represents all non-space characters.
- <p>The definitions of letter, space, and other character groups
- depend on the current locale.
- In particular, the class <code>[a-z]</code> may not be equivalent to <code>%l</code>.
- The second form should be preferred for portability.
- <p><p>
- A <em>pattern item</em> may be
- <ul>
- <li>
- a single character class,
- which matches any single character in the class;
- <li>
- a single character class followed by `<code>*</code>´,
- which matches 0 or more repetitions of characters in the class.
- These repetition items will always match the longest possible sequence;
- <li>
- a single character class followed by `<code>+</code>´,
- which matches 1 or more repetitions of characters in the class.
- These repetition items will always match the longest possible sequence;
- <li>
- a single character class followed by `<code>-</code>´,
- which also matches 0 or more repetitions of characters in the class.
- Unlike `<code>*</code>´,
- these repetition items will always match the <em>shortest</em> possible sequence;
- <li>
- a single character class followed by `<code>?</code>´,
- which matches 0 or 1 occurrence of a character in the class;
- <li>
- <code>%<em>n</em></code>, for <em>n</em> between 1 and 9;
- such item matches a substring equal to the <em>n</em>-th captured string
- (see below);
- <li>
- <code>%b<em>xy</em></code>, where <em>x</em> and <em>y</em> are two distinct characters;
- such item matches strings that start with <em>x</em>, end with <em>y</em>,
- and where the <em>x</em> and <em>y</em> are <em>balanced</em>.
- This means that, if one reads the string from left to right,
- counting <em>+1</em> for an <em>x</em> and <em>-1</em> for a <em>y</em>,
- the ending <em>y</em> is the first <em>y</em> where the count reaches 0.
- For instance, the item <code>%b()</code> matches expressions with
- balanced parentheses.
- </ul>
- <p><p>
- A <em>pattern</em> is a sequence of pattern items.
- A `<code>^</code>´ at the beginning of a pattern anchors the match at the
- beginning of the subject string.
- A `<code>$</code>´ at the end of a pattern anchors the match at the
- end of the subject string.
- At other positions,
- `<code>^</code>´ and `<code>$</code>´ have no special meaning and represent themselves.
- <p><p>
- A pattern may contain sub-patterns enclosed in parentheses;
- they describe <em>captures</em>.
- When a match succeeds, the substrings of the subject string
- that match captures are stored (<em>captured</em>) for future use.
- Captures are numbered according to their left parentheses.
- For instance, in the pattern <code>"(a*(.)%w(%s*))"</code>,
- the part of the string matching <code>"a*(.)%w(%s*)"</code> is
- stored as the first capture (and therefore has number 1);
- the character matching <code>.</code> is captured with number 2,
- and the part matching <code>%s*</code> has number 3.
- <p>As a special case, the empty capture <code>()</code> captures
- the current string position (a number).
- For instance, if we apply the pattern <code>"()aa()"</code> on the
- string <code>"flaaap"</code>, there will be two captures: 3 and 5.
- <p>A pattern cannot contain embedded zeros. Use <code>%z</code> instead.
- <p><a name="5.4"><h2>5.4 - Table Manipulation</h2></a>
- This library provides generic functions for table manipulation.
- It provides all its functions inside the table <code>table</code>.
- <p>Most functions in the table library assume that the table
- represents an array or a list.
- For those functions, an important concept is the <em>size</em> of the array.
- There are three ways to specify that size:
- <ul>
- <li> the field <code>"n"</code> ---
- When the table has a field <code>"n"</code> with a numerical value,
- that value is assumed as its size.
- <li> <code>setn</code> ---
- You can call the <code>table.setn</code> function to explicitly set
- the size of a table.
- <li> implicit size ---
- Otherwise, the size of the object is one less the first integer index
- with a <B>nil</B> value.
- </ul>
- For more details, see the descriptions of the <code>table.getn</code> and
- <code>table.setn</code> functions.
- <p><h3><code>table.concat (table [, sep [, i [, j]]])</code></h3>
- Returns <code>table[i]..sep..table[i+1] ... sep..table[j]</code>.
- The default value for <code>sep</code> is the empty string,
- the default for <code>i</code> is 1,
- and the default for <code>j</code> is the size of the table.
- If <code>i</code> is greater than <code>j</code>, returns the empty string.
- <p><h3><code>table.foreach (table, f)</code></h3>
- Executes the given <code>f</code> over all elements of <code>table</code>.
- For each element, <code>f</code> is called with the index and
- respective value as arguments.
- If <code>f</code> returns a non-<B>nil</B> value,
- then the loop is broken, and this value is returned
- as the final value of <code>foreach</code>.
- <p>See the <code>next</code> function for extra information about table traversals.
- <p><h3><code>table.foreachi (table, f)</code></h3>
- Executes the given <code>f</code> over the
- numerical indices of <code>table</code>.
- For each index, <code>f</code> is called with the index and
- respective value as arguments.
- Indices are visited in sequential order,
- from 1 to <code>n</code>,
- where <code>n</code> is the size of the table (see <a href="#getn">5.4</a>).
- If <code>f</code> returns a non-<B>nil</B> value,
- then the loop is broken and this value is returned
- as the result of <code>foreachi</code>.
- <p><a name="getn"><h3><code>table.getn (table)</code></h3></a>
- Returns the size of a table, when seen as a list.
- If the table has an <code>n</code> field with a numeric value,
- this value is the size of the table.
- Otherwise, if there was a previous call
- to <code>table.setn</code> over this table,
- the respective value is returned.
- Otherwise, the size is one less the first integer index with
- a <B>nil</B> value.
- <p><h3><code>table.sort (table [, comp])</code></h3>
- Sorts table elements in a given order, <em>in-place</em>,
- from <code>table[1]</code> to <code>table[n]</code>,
- where <code>n</code> is the size of the table (see <a href="#getn">5.4</a>).
- If <code>comp</code> is given,
- then it must be a function that receives two table elements,
- and returns true
- when the first is less than the second
- (so that <code>not comp(a[i+1],a[i])</code> will be true after the sort).
- If <code>comp</code> is not given,
- then the standard Lua operator <code><</code> is used instead.
- <p>The sort algorithm is <em>not</em> stable,
- that is, elements considered equal by the given order
- may have their relative positions changed by the sort.
- <p><h3><code>table.insert (table, [pos,] value)</code></h3>
- <p>Inserts element <code>value</code> at position <code>pos</code> in <code>table</code>,
- shifting up other elements to open space, if necessary.
- The default value for <code>pos</code> is <code>n+1</code>,
- where <code>n</code> is the size of the table (see <a href="#getn">5.4</a>),
- so that a call <code>table.insert(t,x)</code> inserts <code>x</code> at the end
- of table <code>t</code>.
- This function also updates the size of the table by
- calling <code>table.setn(table, n+1)</code>.
- <p><h3><code>table.remove (table [, pos])</code></h3>
- <p>Removes from <code>table</code> the element at position <code>pos</code>,
- shifting down other elements to close the space, if necessary.
- Returns the value of the removed element.
- The default value for <code>pos</code> is <code>n</code>,
- where <code>n</code> is the size of the table (see <a href="#getn">5.4</a>),
- so that a call <code>table.remove(t)</code> removes the last element
- of table <code>t</code>.
- This function also updates the size of the table by
- calling <code>table.setn(table, n-1)</code>.
- <p><h3><code>table.setn (table, n)</code></h3>
- <p>Updates the size of a table.
- If the table has a field <code>"n"</code> with a numerical value,
- that value is changed to the given <code>n</code>.
- Otherwise, it updates an internal state
- so that subsequent calls to <code>table.getn(table)</code> return <code>n</code>.
- <p><a name="mathlib"><a name="5.5"><h2>5.5 - Mathematical Functions</h2></a></a>
- <p>This library is an interface to most of the functions of the
- standard C math library.
- (Some have slightly different names.)
- It provides all its functions inside the table <code>math</code>.
- In addition,
- it registers the global <code>__pow</code>
- for the binary exponentiation operator <code>^</code>,
- so that <code>x^y</code> returns <em>x<sup>y</sup></em>.
- The library provides the following functions:
- <PRE>
- math.abs math.acos math.asin math.atan math.atan2
- math.ceil math.cos math.deg math.exp math.floor
- math.log math.log10 math.max math.min math.mod
- math.pow math.rad math.sin math.sqrt math.tan
- math.frexp math.ldexp math.random math.randomseed
- </PRE>
- plus a variable <code>math.pi</code>.
- Most of them
- are only interfaces to the corresponding functions in the C library.
- All trigonometric functions work in radians
- (previous versions of Lua used degrees).
- The functions <code>math.deg</code> and <code>math.rad</code> convert
- between radians and degrees.
- <p>The function <code>math.max</code> returns the maximum
- value of its numeric arguments.
- Similarly, <code>math.min</code> computes the minimum.
- Both can be used with 1, 2, or more arguments.
- <p>The functions <code>math.random</code> and <code>math.randomseed</code>
- are interfaces to the simple random generator functions
- <code>rand</code> and <code>srand</code> that are provided by ANSI C.
- (No guarantees can be given for their statistical properties.)
- When called without arguments,
- <code>math.random</code> returns a pseudo-random real number
- in the range <em>[0,1)</em>.
- When called with a number <em>n</em>,
- <code>math.random</code> returns a pseudo-random integer in the range <em>[1,n]</em>.
- When called with two arguments, <em>l</em> and <em>u</em>,
- <code>math.random</code> returns a pseudo-random integer in the range <em>[l,u]</em>.
- The <code>math.randomseed</code> function sets a "seed"
- for the pseudo-random generator:
- Equal seeds produce equal sequences of numbers.
- <p><a name="libio"><a name="5.6"><h2>5.6 - Input and Output Facilities</h2></a></a>
- <p>The I/O library provides two different styles for file manipulation.
- The first one uses implicit file descriptors,
- that is, there are operations to set a default input file and a
- default output file,
- and all input/output operations are over those default files.
- The second style uses explicit file descriptors.
- <p>When using implicit file descriptors,
- all operations are supplied by table <code>io</code>.
- When using explicit file descriptors,
- the operation <code>io.open</code> returns a file descriptor
- and then all operations are supplied as methods by the file descriptor.
- <p>The table <code>io</code> also provides
- three predefined file descriptors with their usual meanings from C:
- <code>io.stdin</code>, <code>io.stdout</code>, and <code>io.stderr</code>.
- <p>A file handle is a userdata containing the file stream (<code>FILE*</code>),
- with a distinctive metatable created by the I/O library.
- <p>Unless otherwise stated,
- all I/O functions return <B>nil</B> on failure
- (plus an error message as a second result)
- and some value different from <B>nil</B> on success.
- <p><h3><code>io.close ([file])</code></h3>
- <p>Equivalent to <code>file:close</code>.
- Without a <code>file</code>, closes the default output file.
- <p><h3><code>io.flush ()</code></h3>
- <p>Equivalent to <code>file:flush</code> over the default output file.
- <p><h3><code>io.input ([file])</code></h3>
- <p>When called with a file name, it opens the named file (in text mode),
- and sets its handle as the default input file.
- When called with a file handle,
- it simply sets that file handle as the default input file.
- When called without parameters,
- it returns the current default input file.
- <p>In case of errors this function raises the error,
- instead of returning an error code.
- <p><h3><code>io.lines ([filename])</code></h3>
- <p>Opens the given file name in read mode
- and returns an iterator function that,
- each time it is called,
- returns a new line from the file.
- Therefore, the construction
- <PRE>
- for line in io.lines(filename) do ... end
- </PRE>
- will iterate over all lines of the file.
- When the iterator function detects the end of file,
- it returns <B>nil</B> (to finish the loop) and automatically closes the file.
- <p>The call <code>io.lines()</code> (without a file name) is equivalent
- to <code>io.input():lines()</code>, that is, it iterates over the
- lines of the default input file.
- <p><h3><code>io.open (filename [, mode])</code></h3>
- <p>This function opens a file,
- in the mode specified in the string <code>mode</code>.
- It returns a new file handle,
- or, in case of errors, <B>nil</B> plus an error message.
- <p>The <code>mode</code> string can be any of the following:
- <ul>
- <li><b>"r"</b> read mode (the default);
- <li><b>"w"</b> write mode;
- <li><b>"a"</b> append mode;
- <li><b>"r+"</b> update mode, all previous data is preserved;
- <li><b>"w+"</b> update mode, all previous data is erased;
- <li><b>"a+"</b> append update mode, previous data is preserved,
- writing is only allowed at the end of file.
- </ul>
- The <code>mode</code> string may also have a <code>b</code> at the end,
- which is needed in some systems to open the file in binary mode.
- This string is exactly what is used in the standard C function <code>fopen</code>.
- <p><h3><code>io.output ([file])</code></h3>
- <p>Similar to <code>io.input</code>, but operates over the default output file.
- <p><h3><code>io.read (format1, ...)</code></h3>
- <p>Equivalent to <code>io.input():read</code>.
- <p><h3><code>io.tmpfile ()</code></h3>
- <p>Returns a handle for a temporary file.
- This file is open in update mode
- and it is automatically removed when the program ends.
- <p><h3><code>io.type (obj)</code></h3>
- <p>Checks whether <code>obj</code> is a valid file handle.
- Returns the string <code>"file"</code> if <code>obj</code> is an open file handle,
- <code>"closed file"</code> if <code>obj</code> is a closed file handle,
- and <B>nil</B> if <code>obj</code> is not a file handle.
- <p><h3><code>io.write (value1, ...)</code></h3>
- <p>Equivalent to <code>io.output():write</code>.
- <p><h3><code>file:close ()</code></h3>
- <p>Closes <code>file</code>.
- <p><h3><code>file:flush ()</code></h3>
- <p>Saves any written data to <code>file</code>.
- <p><h3><code>file:lines ()</code></h3>
- <p>Returns an iterator function that,
- each time it is called,
- returns a new line from the file.
- Therefore, the construction
- <PRE>
- for line in file:lines() do ... end
- </PRE>
- will iterate over all lines of the file.
- (Unlike <code>io.lines</code>, this function does not close the file
- when the loop ends.)
- <p><h3><code>file:read (format1, ...)</code></h3>
- <p>Reads the file <code>file</code>,
- according to the given formats, which specify what to read.
- For each format,
- the function returns a string (or a number) with the characters read,
- or <B>nil</B> if it cannot read data with the specified format.
- When called without formats,
- it uses a default format that reads the entire next line
- (see below).
- <p>The available formats are
- <ul>
- <li><b>"*n"</b> reads a number;
- this is the only format that returns a number instead of a string.
- <li><b>"*a"</b> reads the whole file, starting at the current position.
- On end of file, it returns the empty string.
- <li><b>"*l"</b> reads the next line (skipping the end of line),
- returning <B>nil</B> on end of file.
- This is the default format.
- <li><b><em>number</em></b> reads a string with up to that number of characters,
- returning <B>nil</B> on end of file.
- If number is zero,
- it reads nothing and returns an empty string,
- or <B>nil</B> on end of file.
- </ul>
- <p><h3><code>file:seek ([whence] [, offset])</code></h3>
- <p>Sets and gets the file position,
- measured from the beginning of the file,
- to the position given by <code>offset</code> plus a base
- specified by the string <code>whence</code>, as follows:
- <ul>
- <li><b>"set"</b> base is position 0 (beginning of the file);
- <li><b>"cur"</b> base is current position;
- <li><b>"end"</b> base is end of file;
- </ul>
- In case of success, function <code>seek</code> returns the final file position,
- measured in bytes from the beginning of the file.
- If this function fails, it returns <B>nil</B>,
- plus a string describing the error.
- <p>The default value for <code>whence</code> is <code>"cur"</code>,
- and for <code>offset</code> is 0.
- Therefore, the call <code>file:seek()</code> returns the current
- file position, without changing it;
- the call <code>file:seek("set")</code> sets the position to the
- beginning of the file (and returns 0);
- and the call <code>file:seek("end")</code> sets the position to the
- end of the file, and returns its size.
- <p><h3><code>file:write (value1, ...)</code></h3>
- <p>Writes the value of each of its arguments to
- the filehandle <code>file</code>.
- The arguments must be strings or numbers.
- To write other values,
- use <code>tostring</code> or <code>string.format</code> before <code>write</code>.
- <p><a name="libiosys"><a name="5.7"><h2>5.7 - Operating System Facilities</h2></a></a>
- <p>This library is implemented through table <code>os</code>.
- <p><h3><code>os.clock ()</code></h3>
- <p>Returns an approximation of the amount of CPU time
- used by the program, in seconds.
- <p><h3><code>os.date ([format [, time]])</code></h3>
- <p>Returns a string or a table containing date and time,
- formatted according to the given string <code>format</code>.
- <p>If the <code>time</code> argument is present,
- this is the time to be formatted
- (see the <code>os.time</code> function for a description of this value).
- Otherwise, <code>date</code> formats the current time.
- <p>If <code>format</code> starts with `<code>!</code>´,
- then the date is formatted in Coordinated Universal Time.
- After that optional character,
- if <code>format</code> is <code>*t</code>,
- then <code>date</code> returns a table with the following fields:
- <code>year</code> (four digits), <code>month</code> (1--12), <code>day</code> (1--31),
- <code>hour</code> (0--23), <code>min</code> (0--59), <code>sec</code> (0--61),
- <code>wday</code> (weekday, Sunday is 1),
- <code>yday</code> (day of the year),
- and <code>isdst</code> (daylight saving flag, a boolean).
- <p>If <code>format</code> is not <code>*t</code>,
- then <code>date</code> returns the date as a string,
- formatted according to the same rules as the C function <code>strftime</code>.
- <p>When called without arguments,
- <code>date</code> returns a reasonable date and time representation that depends on
- the host system and on the current locale
- (that is, <code>os.date()</code> is equivalent to <code>os.date("%c")</code>).
- <p><h3><code>os.difftime (t2, t1)</code></h3>
- <p>Returns the number of seconds from time <code>t1</code> to time <code>t2</code>.
- In Posix, Windows, and some other systems,
- this value is exactly <code>t2</code><em>-</em><code>t1</code>.
- <p><h3><code>os.execute (command)</code></h3>
- <p>This function is equivalent to the C function <code>system</code>.
- It passes <code>command</code> to be executed by an operating system shell.
- It returns a status code, which is system-dependent.
- <p><h3><code>os.exit ([code])</code></h3>
- <p>Calls the C function <code>exit</code>,
- with an optional <code>code</code>,
- to terminate the host program.
- The default value for <code>code</code> is the success code.
- <p><h3><code>os.getenv (varname)</code></h3>
- <p>Returns the value of the process environment variable <code>varname</code>,
- or <B>nil</B> if the variable is not defined.
- <p><h3><code>os.remove (filename)</code></h3>
- <p>Deletes the file with the given name.
- If this function fails, it returns <B>nil</B>,
- plus a string describing the error.
- <p><h3><code>os.rename (oldname, newname)</code></h3>
- <p>Renames file named <code>oldname</code> to <code>newname</code>.
- If this function fails, it returns <B>nil</B>,
- plus a string describing the error.
- <p><h3><code>os.setlocale (locale [, category])</code></h3>
- <p>Sets the current locale of the program.
- <code>locale</code> is a string specifying a locale;
- <code>category</code> is an optional string describing which category to change:
- <code>"all"</code>, <code>"collate"</code>, <code>"ctype"</code>,
- <code>"monetary"</code>, <code>"numeric"</code>, or <code>"time"</code>;
- the default category is <code>"all"</code>.
- The function returns the name of the new locale,
- or <B>nil</B> if the request cannot be honored.
- <p><h3><code>os.time ([table])</code></h3>
- <p>Returns the current time when called without arguments,
- or a time representing the date and time specified by the given table.
- This table must have fields <code>year</code>, <code>month</code>, and <code>day</code>,
- and may have fields <code>hour</code>, <code>min</code>, <code>sec</code>, and <code>isdst</code>
- (for a description of these fields, see the <code>os.date</code> function).
- <p>The returned value is a number, whose meaning depends on your system.
- In Posix, Windows, and some other systems, this number counts the number
- of seconds since some given start time (the "epoch").
- In other systems, the meaning is not specified,
- and the number returned by <code>time</code> can be used only as an argument to
- <code>date</code> and <code>difftime</code>.
- <p><h3><code>os.tmpname ()</code></h3>
- <p>Returns a string with a file name that can
- be used for a temporary file.
- The file must be explicitly opened before its use
- and removed when no longer needed.
- <p>This function is equivalent to the <code>tmpnam</code> C function,
- and many people (and even some compilers!) advise against its use,
- because between the time you call this function
- and the time you open the file,
- it is possible for another process
- to create a file with the same name.
- <p><a name="5.8"><h2>5.8 - The Reflexive Debug Interface</h2></a>
- <p>The <code>debug</code> library provides
- the functionality of the debug interface to Lua programs.
- You should exert care when using this library.
- The functions provided here should be used exclusively for debugging
- and similar tasks, such as profiling.
- Please resist the temptation to use them as a
- usual programming tool:
- They can be very slow.
- Moreover, <code>setlocal</code> and <code>getlocal</code>
- violate the privacy of local variables
- and therefore can compromise some otherwise secure code.
- <p>All functions in this library are provided
- inside a <code>debug</code> table.
- <p><h3><code>debug.debug ()</code></h3>
- <p>Enters an interactive mode with the user,
- running each string that the user enters.
- Using simple commands and other debug facilities,
- the user can inspect global and local variables,
- change their values, evaluate expressions, and so on.
- A line containing only the word <code>cont</code> finishes this function,
- so that the caller continues its execution.
- <p>Note that commands for <code>debug.debug</code> are not lexically nested
- with any function, so they have no direct access to local variables.
- <p><h3><code>debug.gethook ()</code></h3>
- <p>Returns the current hook settings, as three values:
- the current hook function, the current hook mask,
- and the current hook count (as set by the <code>debug.sethook</code> function).
- <p><h3><code>debug.getinfo (function [, what])</code></h3>
- <p>This function returns a table with information about a function.
- You can give the function directly,
- or you can give a number as the value of <code>function</code>,
- which means the function running at level <code>function</code> of the call stack:
- Level 0 is the current function (<code>getinfo</code> itself);
- level 1 is the function that called <code>getinfo</code>;
- and so on.
- If <code>function</code> is a number larger than the number of active functions,
- then <code>getinfo</code> returns <B>nil</B>.
- <p>The returned table contains all the fields returned by <code>lua_getinfo</code>,
- with the string <code>what</code> describing which fields to fill in.
- The default for <code>what</code> is to get all information available.
- If present,
- the option `<code>f</code>´
- adds a field named <code>func</code> with the function itself.
- <p>For instance, the expression <code>debug.getinfo(1,"n").name</code> returns
- the name of the current function, if a reasonable name can be found,
- and <code>debug.getinfo(print)</code> returns a table with all available information
- about the <code>print</code> function.
- <p><h3><code>debug.getlocal (level, local)</code></h3>
- <p>This function returns the name and the value of the local variable
- with index <code>local</code> of the function at level <code>level</code> of the stack.
- (The first parameter or local variable has index 1, and so on,
- until the last active local variable.)
- The function returns <B>nil</B> if there is no local
- variable with the given index,
- and raises an error when called with a <code>level</code> out of range.
- (You can call <code>debug.getinfo</code> to check whether the level is valid.)
- <p><h3><code>debug.getupvalue (func, up)</code></h3>
- <p>This function returns the name and the value of the upvalue
- with index <code>up</code> of the function <code>func</code>.
- The function returns <B>nil</B> if there is no upvalue with the given index.
- <p><h3><code>debug.setlocal (level, local, value)</code></h3>
- <p>This function assigns the value <code>value</code> to the local variable
- with index <code>local</code> of the function at level <code>level</code> of the stack.
- The function returns <B>nil</B> if there is no local
- variable with the given index,
- and raises an error when called with a <code>level</code> out of range.
- (You can call <code>getinfo</code> to check whether the level is valid.)
- <p><h3><code>debug.setupvalue (func, up, value)</code></h3>
- <p>This function assigns the value <code>value</code> to the upvalue
- with index <code>up</code> of the function <code>func</code>.
- The function returns <B>nil</B> if there is no upvalue
- with the given index.
- <p><h3><code>debug.sethook (hook, mask [, count])</code></h3>
- <p>Sets the given function as a hook.
- The string <code>mask</code> and the number <code>count</code> describe
- when the hook will be called.
- The string mask may have the following characters,
- with the given meaning:
- <ul>
- <li><b><code>"c"</code></b> The hook is called every time Lua calls a function;
- <li><b><code>"r"</code></b> The hook is called every time Lua returns from a function;
- <li><b><code>"l"</code></b> The hook is called every time Lua enters a new line of code.
- </ul>
- With a <code>count</code> different from zero,
- the hook is called after every <code>count</code> instructions.
- <p>When called without arguments,
- the <code>debug.sethook</code> function turns off the hook.
- <p>When the hook is called, its first parameter is always a string
- describing the event that triggered its call:
- <code>"call"</code>, <code>"return"</code> (or <code>"tail return"</code>),
- <code>"line"</code>, and <code>"count"</code>.
- Moreover, for line events,
- it also gets as its second parameter the new line number.
- Inside a hook,
- you can call <code>getinfo</code> with level 2 to get more information about
- the running function
- (level 0 is the <code>getinfo</code> function,
- and level 1 is the hook function),
- unless the event is <code>"tail return"</code>.
- In this case, Lua is only simulating the return,
- and a call to <code>getinfo</code> will return invalid data.
- <p><h3><code>debug.traceback ([message])</code></h3>
- <p>Returns a string with a traceback of the call stack.
- An optional <code>message</code> string is appended
- at the beginning of the traceback.
- This function is typically used with <code>xpcall</code> to produce
- better error messages.
- <p>
- <a name="lua-sa"><a name="6"><h1>6 - Lua Stand-alone</h1></a></a>
- <p>Although Lua has been designed as an extension language,
- to be embedded in a host C program,
- it is also frequently used as a stand-alone language.
- An interpreter for Lua as a stand-alone language,
- called simply <code>lua</code>,
- is provided with the standard distribution.
- The stand-alone interpreter includes
- all standard libraries plus the reflexive debug interface.
- Its usage is:
- <PRE>
- lua [options] [script [args]]
- </PRE>
- The options are:
- <ul>
- <li><b><code>-</code> </b> executes <code>stdin</code> as a file;
- <li><b><code>-e</code> <em>stat</em></b> executes string <em>stat</em>;
- <li><b><code>-l</code> <em>file</em></b> "requires" <em>file</em>;
- <li><b><code>-i</code></b> enters interactive mode after running <em>script</em>;
- <li><b><code>-v</code></b> prints version information;
- <li><b><code>--</code></b> stop handling options.
- </ul>
- After handling its options, <code>lua</code> runs the given <em>script</em>,
- passing to it the given <em>args</em>.
- When called without arguments,
- <code>lua</code> behaves as <code>lua -v -i</code> when <code>stdin</code> is a terminal,
- and as <code>lua -</code> otherwise.
- <p>Before running any argument,
- the interpreter checks for an environment variable <code>LUA_INIT</code>.
- If its format is @<em>filename</em>,
- then lua executes the file.
- Otherwise, lua executes the string itself.
- <p>All options are handled in order, except <code>-i</code>.
- For instance, an invocation like
- <PRE>
- $ lua -e'a=1' -e 'print(a)' script.lua
- </PRE>
- will first set <code>a</code> to 1, then print <code>a</code>,
- and finally run the file <code>script.lua</code>.
- (Here, <code>$</code> is the shell prompt. Your prompt may be different.)
- <p>Before starting to run the script,
- <code>lua</code> collects all arguments in the command line
- in a global table called <code>arg</code>.
- The script name is stored in index 0,
- the first argument after the script name goes to index 1,
- and so on.
- The field <code>n</code> gets the number of arguments after the script name.
- Any arguments before the script name
- (that is, the interpreter name plus the options)
- go to negative indices.
- For instance, in the call
- <PRE>
- $ lua -la.lua b.lua t1 t2
- </PRE>
- the interpreter first runs the file <code>a.lua</code>,
- then creates a table
- <PRE>
- arg = { [-2] = "lua", [-1] = "-la.lua", [0] = "b.lua",
- [1] = "t1", [2] = "t2"; n = 2 }
- </PRE>
- and finally runs the file <code>b.lua</code>.
- <p>In interactive mode,
- if you write an incomplete statement,
- the interpreter waits for its completion.
- <p>If the global variable <code>_PROMPT</code> is defined as a string,
- then its value is used as the prompt.
- Therefore, the prompt can be changed directly on the command line:
- <PRE>
- $ lua -e"_PROMPT='myprompt> '" -i
- </PRE>
- (the outer pair of quotes is for the shell,
- the inner is for Lua),
- or in any Lua programs by assigning to <code>_PROMPT</code>.
- Note the use of <code>-i</code> to enter interactive mode; otherwise,
- the program would end just after the assignment to <code>_PROMPT</code>.
- <p>In Unix systems, Lua scripts can be made into executable programs
- by using <code>chmod +x</code> and the <code>#!</code> form,
- as in
- <PRE>
- #!/usr/local/bin/lua
- </PRE>
- (Of course,
- the location of the Lua interpreter may be different in your machine.
- If <code>lua</code> is in your <code>PATH</code>,
- then
- <PRE>
- #!/usr/bin/env lua
- </PRE>
- is a more portable solution.)
- <p>
- <h1>Acknowledgments</h1>
- <p>The Lua team is grateful to <a href="http://www.tecgraf.puc-rio.br">Tecgraf</a> for its continued support to Lua.
- We thank everyone at <a href="http://www.tecgraf.puc-rio.br">Tecgraf</a>,
- specially the head of the group, Marcelo Gattass.
- At the risk of omitting several names,
- we also thank the following individuals for supporting,
- contributing to, and spreading the word about Lua:
- Alan Watson.
- André Clinio,
- André Costa,
- Antonio Scuri,
- Asko Kauppi,
- Bret Mogilefsky,
- Cameron Laird,
- Carlos Cassino,
- Carlos Henrique Levy,
- Claudio Terra,
- David Jeske,
- Ed Ferguson,
- Edgar Toernig,
- Erik Hougaard,
- Jim Mathies,
- John Belmonte,
- John Passaniti,
- John Roll,
- Jon Erickson,
- Jon Kleiser,
- Mark Ian Barlow,
- Nick Trout,
- Noemi Rodriguez,
- Norman Ramsey,
- Philippe Lhoste,
- Renata Ratton,
- Renato Borges,
- Renato Cerqueira,
- Reuben Thomas,
- Stephan Herrmann,
- Steve Dekorte,
- Thatcher Ulrich,
- Tomás Gorham,
- Vincent Penquerc'h.
- Thank you!
- <p><hr>
- <p><h1>Incompatibilities with Previous Versions</h1>
- <p>Lua 5.0 is a major release.
- There are several incompatibilities with its previous version, Lua 4.0.
- <p><h2>Incompatibilities with version 4.0</h2>
- <p><h3>Changes in the Language</h3>
- <ul>
- <p><li>
- The whole tag-method scheme was replaced by metatables.
- <p><li>
- Function calls written between parentheses result in exactly one value.
- <p><li>
- A function call as the last expression in a list constructor
- (like <code>{a,b,f()}</code>) has all its return values inserted in the list.
- <p><li>
- The precedence of <b>or</b> is smaller than the precedence of <b>and</b>.
- <p><li>
- <b>in</b>, <b>false</b>, and <b>true</b> are reserved words.
- <p><li>
- The old construction <code>for k,v in t</code>, where <code>t</code> is a table,
- is deprecated (although it is still supported).
- Use <code>for k,v in pairs(t)</code> instead.
- <p><li>
- When a literal string of the form <code>[[...]]</code> starts with a newline,
- this newline is ignored.
- <p>
- <p><li> Upvalues in the form <code>%var</code> are obsolete;
- use external local variables instead.
- <p></ul>
- <p><h3>Changes in the Libraries</h3>
- <ul>
- <p><li>
- Most library functions now are defined inside tables.
- There is a compatibility script (<code>compat.lua</code>) that
- redefines most of them as global names.
- <p><li>
- In the math library, angles are expressed in radians.
- With the compatibility script (<code>compat.lua</code>),
- functions still work in degrees.
- <p><li>
- The <code>call</code> function is deprecated.
- Use <code>f(unpack(tab))</code> instead of <code>call(f, tab)</code>
- for unprotected calls,
- or the new <code>pcall</code> function for protected calls.
- <p><li>
- <code>dofile</code> does not handle errors, but simply propagates them.
- <p><li>
- <code>dostring</code> is deprecated. Use <code>loadstring</code> instead.
- <p><li>
- The <code>read</code> option <code>*w</code> is obsolete.
- <p><li>
- The <code>format</code> option <code>%n$</code> is obsolete.
- <p></ul>
- <p><h3>Changes in the API</h3>
- <ul>
- <p><li>
- <code>lua_open</code> does not have a stack size as its argument
- (stacks are dynamic).
- <p><li>
- <code>lua_pushuserdata</code> is deprecated.
- Use <code>lua_newuserdata</code> or <code>lua_pushlightuserdata</code> instead.
- <p></ul>
- <p>
- <a name="BNF"><h1>The Complete Syntax of Lua</h1></a>
- <p>
- <p><pre>
- <p> chunk ::= {stat [`<b>;</b>´]}
- <p> block ::= chunk
- <p> stat ::= varlist1 `<b>=</b>´ explist1 | functioncall | <b>do</b> block <b>end</b> | <b>while</b> exp <b>do</b> block <b>end</b> | <b>repeat</b> block <b>until</b> exp | <b>if</b> exp <b>then</b> block {<b>elseif</b> exp <b>then</b> block} [<b>else</b> block] <b>end</b> | <b>return</b> [explist1] | <b>break</b> | <b>for</b> Name `<b>=</b>´ exp `<b>,</b>´ exp [`<b>,</b>´ exp] <b>do</b> block <b>end</b> | <b>for</b> Name {`<b>,</b>´ Name} <b>in</b> explist1 <b>do</b> block <b>end</b> | <b>function</b> funcname funcbody | <b>local</b> <b>function</b> Name funcbody | <b>local</b> namelist [init]
- <p> funcname ::= Name {`<b>.</b>´ Name} [`<b>:</b>´ Name]
- <p> varlist1 ::= var {`<b>,</b>´ var}
- <p> var ::= Name | prefixexp `<b>[</b>´ exp `<b>]</b>´ | prefixexp `<b>.</b>´ Name
- <p> namelist ::= Name {`<b>,</b>´ Name}
- <p> init ::= `<b>=</b>´ explist1
- <p> explist1 ::= {exp `<b>,</b>´} exp
- <p> exp ::= <b>nil</b> | <b>false</b> | <b>true</b> | Number | Literal | function | prefixexp | tableconstructor | exp binop exp | unop exp
- <p> prefixexp ::= var | functioncall | `<b>(</b>´ exp `<b>)</b>´
- <p> functioncall ::= prefixexp args | prefixexp `<b>:</b>´ Name args
- <p> args ::= `<b>(</b>´ [explist1] `<b>)</b>´ | tableconstructor | Literal
- <p> function ::= <b>function</b> funcbody
- <p> funcbody ::= `<b>(</b>´ [parlist1] `<b>)</b>´ block <b>end</b>
- <p> parlist1 ::= Name {`<b>,</b>´ Name} [`<b>,</b>´ `<b>...</b>´] | `<b>...</b>´
- <p> tableconstructor ::= `<b>{</b>´ [fieldlist] `<b>}</b>´
- fieldlist ::= field {fieldsep field} [fieldsep]
- field ::= `<b>[</b>´ exp `<b>]</b>´ `<b>=</b>´ exp | name `<b>=</b>´ exp | exp
- fieldsep ::= `<b>,</b>´ | `<b>;</b>´
- <p> binop ::= `<b>+</b>´ | `<b>-</b>´ | `<b>*</b>´ | `<b>/</b>´ | `<b>^</b>´ | `<b>..</b>´ | `<b><</b>´ | `<b><=</b>´ | `<b>></b>´ | `<b>>=</b>´ | `<b>==</b>´ | `<b>~=</b>´ | <b>and</b> | <b>or</b>
- <p> unop ::= `<b>-</b>´ | <b>not</b>
- <p></pre>
- <p>
- <p>
- <HR>
- <SMALL>
- Last update:
- Tue Jan 4 15:56:15 BRST 2005
- </SMALL>
- </BODY>
- </HTML>
|