Вы находитесь на странице: 1из 72

26/5/2016

Manual de Referencia de Lua 5.1

ManualdeReferenciadeLua5.1
porRobertoIerusalimschy,LuizHenriquedeFigueiredo,WaldemarCeles
(TraduccindeJulioManuelFernndezDazvanselasnotassobrelamismaalfinaldeldocumento.)
Copyright20072008Lua.org,PUCRio.LibrementedisponiblebajolostrminosdelalicenciadeLua.

contenidondiceenglishportugusespaol

1Introduccin
Lua es un lenguage de programacin extensible diseado para una programacin procedimental general
con utilidades para la descripcin de datos. Tambin ofrece un buen soporte para la programacin
orientada a objetos, programacin funcional y programacin orientada a datos. Se pretende que Lua sea
usado como un lenguaje de script potente y ligero para cualquier programa que lo necesite. Lua est
implementado como una biblioteca escrita en C limpio (esto es, en el subconjunto comn de ANSI C y
C++).
Siendo un lenguaje de extensin, Lua no tiene nocin de programa principal (main): slo funciona
embebido en un cliente anfitrin, denominado programa contenedor o simplemente anfitrin (host). ste
puede invocar funciones para ejecutar un trozo de cdigo Lua, puede escribir y leer variables de Lua y
puederegistrarfuncionesCparaqueseanllamadasporelcdigoLua.AtravsdelusodefuncionesC,
Lua puede ser aumentado para abarcar un amplio rango de diferentes dominios, creando entonces
lenguajes de programacin personalizados que comparten el mismo marco sintctico. La distribucin de
Luaincluyeunprogramaanfitrindemuestradenominadolua,queusalabibliotecadeLuaparaofrecer
unintrpretedeLuacompletoeindependiente.
Luaessoftwarelibre,yseproporciona,comoesusual,singarantas,comoseestableceensulicencia.La
implementacindescritaenestemanualestdisponibleenelsitioweboficialdeLua,www.lua.org.
Como cualquier otro manual de referencia, este documento es parco en algunos lugares. Para una
discusindelasdecisionesdetrsdeldiseodeLua,vanselosartculostcnicosdisponiblesenelsitio
web de Lua. Para una detallada introduccin a la programacin en Lua, vase el libro de Roberto,
ProgramminginLua(SecondEdition).

2Ellenguaje
Estaseccindescribeellxico,lasintaxisylasemnticadeLua.Enotraspalabras,estaseccindescribe
quelementos(tokens)sonvlidos,cmodebencombinarseyqusignificasucombinacin.
Las construcciones del lenguaje se explicarn usando la notacin BNF extendida usual, en la que {a}
significa0omsaes,y[a]significaunaaopcional.Lossmbolosnoterminalessemuestranenitlica,las
palabrasclave(keywords)semuestranennegrita,ylosotrossmbolosterminalessemuestranenuntipo
de letra de paso fijo (typewriter), encerrada entre comillas simples. La sintaxis completa de Lua se
encuentraalfinaldeestemanual.

2.1Conveccioneslxicas
https://www.lua.org/manual/5.1/es/manual.html#2.1

1/72

26/5/2016

Manual de Referencia de Lua 5.1

Losnombres(tambinllamadosidentificadores)enLuapuedensercualquiertiradecaracteres(string)slo
conletras,dgitosycaracteresdesubrayado(underscore),nocomenzandoporundgito.Estocoincidecon
la definicin de los nombres en la mayora de los lenguajes. (La definicin de letra depende de la
implementacin local actual a travs del sistema locale: cualquier carcter considerado alfabtico en el
sistema local puede ser usado en un identificador.) Los identificadores se usan para nombrar variables y
camposdetablas.
Lassiguientespalabrasclave(keywords)estnreservadasynopuedenusarsecomonombres:
and
end
in
repeat

break
false
local
return

do
for
nil
then

else
function
not
true

elseif
if
or
until

while

En Lua las letras maysculas y las minsculas se consideran diferentes: and es una palabra reservada,
peroAndyANDsondosnombresdiferentesvlidos.Comoconvencin,losnombresquecomienzanporun
subrayadoseguidoporletrasenmaysculas(como_VERSION)estnreservadosparausocomovariables
globalesinternasdeLua.
Lossiguientesstringsdenotanotroselementos:
+
==
(
;

~=
)
:

*
<=
{
,

/
>=
}
.

%
<
[
..

^
>
]
...

#
=

Losstringsliteralespuedenserdelimitadosporcomillassimples(apstrofes)odobles,ypuedencontener
las siguientes secuencias de escape de C: '\a' (pitido, bell) '\b' (retroceso, backspace), '\f' (salto de
pgina, form feed), '\n' (nueva lnea, newline), '\r' (retorno de carro, carriage return), '\t' (tabulador
horizontal,horizontaltab),'\v'(tabuladorvertical,verticaltab),'\\'(barrainversa,backslash),'\"'(comilla
doble,quotationmarkodoublequote)y'\''(apstrofe,apostropheosinglequote).Adems,una'\newline'
(esto es, una barra inversa seguida por un salto de lnea real) produce un salto de lnea en el string.Un
carcter en un string puede tambin especificarse por su valor numrico usando la secuencia de escape
'\ddd', donde ddd es una secuencia de tres dgitos decimales. (Tenga presente que si la secuencia
numricadeescapeestseguidadeundgitodebeserexpresadausandoexactamentetresdgitos.)Los
strings en Lua pueden contener cualquier valor de 8 bits, incluyendo el carcter cero, el cual puede ser
especificadomediante'\0'.
Paraponerunacomilla(simple)doble,unabarrainversa,unretornodecarroouncarctercerodentrode
unstringliteralencerradoporcomillas(simples)doblessedebeusarunasecuenciadeescape.Cualquier
otrocarcterpuedeserincluidoenelliteral.(Algunoscaracteresdecontrolpuedencausarproblemascon
elsistemadeficheros,peroLuanotieneproblemasconellos.)
Losstringsliteralespuedendefinirseusandounformatolargo,encerradosencorcheteslargos. Definimos
uncorchetelargodeabrirdenivelncomouncorchetedeabrirseguidodensignosigual(=)seguidosde
otrocorchetedeabrir.As,uncorchetelargodeabrirdenivel0seescribe[[,uncorchetelargodeabrirde
nivel1seescribe[=[,yassucesivamente.Loscorcheteslargosdecerrarse definede manerasimilar
por ejemplo, un corchete largo de cerrar de nivel 4 se expresa ]====].Unstring largo comienza en un
corchetelargodeabrirdecualquiernivelyterminaenelprimercorchetelargodecerrardelmismonivel.
Los strings literales delimitados de esta manera pueden extenderse por varias lneas, las secuencias de
escape no son interpretadas y se ignoran los corchetes largos de cualquier otro nivel. Por tanto, pueden
contenercualquiercosaexceptouncorchetedecerrardelmismonivelocaracterescero.
Porconveniencia,cuandouncorchetelargodeabriresseguidoinmediatamentedeuncarcterdenueva
lnea,stenoesincluidoenelstring.Porejemplo,usandoelcdigodecaracteresASCII(enelcual'a'se
codifica como 97, el carcter de nueva lnea se codifica como 10, y '1' se codifica como 49), los cinco
literalessiguientesdenotanelmismostring:
a = 'alo\n123"'
a = "alo\n123\""
a = '\97lo\10\04923"'
a = [[alo
123"]]
a = [==[
https://www.lua.org/manual/5.1/es/manual.html#2.1

2/72

26/5/2016

Manual de Referencia de Lua 5.1

alo
123"]==]
Lasconstantesnumricaspuedencontenerunapartedecimalopcionalytambinunexponenteopcional.
Lua tambin acepta constantes enteras hexadecimales, escritas anteponiendo el prefijo 0x. Algunos
ejemplosdeconstantesnumricasvlidasson
3

3.0

3.1416 314.16e-2

0.31416E1 0xff 0x56

Loscomentarioscomienzanconundobleguin(--)encualquierlugarfueradeunstring.Sieltextoque
sigueinmediatamentedespusde--noesuncorchetelargodeabrirelcomentarioescortoyllegahasta
elfinaldelnea.Enotrocasotenemosuncomentariolargo,quealcanzahastaelcorrespondientecorchete
largodecerrar.Loscomentarioslargosseusanfrecuentementeparadeshabilitartemporalmentetrozosde
cdigo.

2.2Valoresytipos
Luaesunlenguajedinmicamentetipado.Estosignificaquelasvariablesnotienentiposslotienentipo
losvalores.Noexistendefinicionesdetipoenellenguaje.Todoslosvaloresalmacenansupropiotipo.
Todos los valores en Lua son valores de primera clase. Esto significa que todos ellos pueden ser
almacenados en variables, pueden ser pasados como argumentos de funciones, y tambin ser devueltos
comoresultados.
ExistenochotiposbsicosenLua:nil,boolean,number,string,function,userdata,threadytable.Nilesel
tipodelvalornil,cuyaprincipalpropiedadesserdiferentedecualquierotrovalornormalmenterepresenta
la ausencia de un valor til. Boolean es el tipo de los valores false (falso) y true (verdadero). Tanto nil
comofalsehacenunacondicinfalsacualquierotrovalorlahaceverdadera.Numberrepresentanmeros
reales (en coma flotante y doble precision). (Es fcil construir intrpretes de Lua que usen otra
representacin interna para los nmeros, ya sea en coma flotante con precisin simple o enteros largos.
Vaseelficheroluaconf.h.)Stringrepresentaunatiradecaracteres.Luatrabajacon8bits:losstrings
puedencontenercualquiercarcterde8bits,incluyendoelcarctercero('\0')(vase2.1).
Luapuedellamar(ymanejar)funcionesescritasenLuayfuncionesescritasenC(vase2.5.8).
El tipo userdata se incluye para permitir guardar en variables de Lua datos arbitrarios en C. Este tipo
corresponde a bloques de memoria y no tienen asociadas operaciones predefinidas en Lua, excepto la
asignacin y el test de identidad. Sin embargo, usando metatablas, el programador puede definir
operaciones asociadas a valores de tipo userdata (vase 2.8). Los valores de este tipo no pueden ser
creadosomodificadosenLua,sinosloatravsdelaAPIdeC.Estogarantizalaintegridaddelosdatos
propiedaddelprogramaanfitrin.
Eltipothreadrepresentaprocesosdeejecucinyesusadoparaimplementarcorutinas(vase2.11).No
debenconfundirselosprocesosdeLuaconlosdelsistemaoperativo.Luasoportacorutinasentodoslos
sistemas,inclusoenaqullosquenosoportenprocesos.
Eltipotable(tabla)implementaarraysasociativos,estoes,arraysquepuedenserindexadosnoslocon
nmeros, sino tambin con cualquier valor (excepto nil). Las tablas pueden ser heterogneas, ya que
pueden contener valores de todos los tipos (excepto nil). Las tablas son el nico mecanismo de
estructuracindedatosenLuapuedenserusadaspararepresentararraysordinarios,tablasdesmbolos,
conjuntos, registros, grafos, rboles, etc. Para representar registros Lua usa el nombre del campo como
ndice. El lenguaje soporta esta representacin haciendo la notacin b.nombre equivalente a
b["nombre"].ExistenvariasmanerasconvenientesdecreartablasenLua(vase2.5.7).
Comondices,tambinlosvaloresdeloscamposdeunatablapuedenserdecualquiertipo(exceptonil).
Enparticular,debidoaquelasfuncionessonvaloresdeprimeraclase,loscamposdelastablaspueden
contenerfunciones.Entonceslastablaspuedencontenertambinmtodos(vase2.5.9).
Losvaloresdelastablas,lasfunciones,losprocesosylosuserdata(completos)sonobjetos:lasvariables
nocontienenrealmenteesosvalores,sinoqueslolosreferencian.Laasignacin,elpasodeargumentosy
el retorno de las funciones siempre manejan referencias a esos valores esas operaciones no implican
ningntipodecopia.

https://www.lua.org/manual/5.1/es/manual.html#2.1

3/72

26/5/2016

Manual de Referencia de Lua 5.1

Lafuncindebibliotecatyperetornaunstringquedescribeeltipodeunvalordado.

2.2.1Coercin
Lua puede convertir automticamente entre valores string y valores numricos en tiempo de ejecucin.
Cualquieroperacinaritmticaaplicadaaunstringintentaconvertirelmismoenunnmero,siguiendolas
reglas normales de conversin. Y viceversa, cuando un nmero se usa donde se espera un string el
nmero se convierte a string, con un formato razonable. Para un control completo en la conversin de
nmeros en strings debe usarse la funcin format de la biblioteca de manejo de strings (vase
string.format).

2.3Variables
Las variables son lugares donde se almacenan valores. Existen tres tipos de variables en Lua: globales,
localesycamposdetabla.
Unniconombrepuededenotarunavariablelocalounaglobal(ounargumentoformaldeunafuncin,el
cualesunaformaparticulardeunavariablelocal):
var ::= nombre
nombredenotaidentificadores,comosedefinenen2.1.
Lua asume que las variables son globales, a no ser que sean declaradas explcitamente como locales
(vase2.4.7).Lasvariableslocalestienenunmbito(scope)definidolxicamente:puedenseraccedidas
librementedesdedentrodelasfuncionesdefinidasensumismombito(vase2.6).
Antesdelaprimeraasignacinelvalordeunavariableesnil.
Loscorchetesseusanparaindexarunatabla:
var ::= prefixexp '[' exp ']'
La primera expresin (prefixexp) debe dar como resultado un valor tabla la segunda expresin (exp)
identifica una entrada especfica en esta tabla. La expresin que denota la tabla que es indexada tienen
unasintaxisrestringidavase2.5paramsdetalles.
Lasintaxisvar.nombreesotramaneradeexpresarvar["nombre"]yseusaparadenotarcamposde
tablas:
var ::= prefixexp '.' nombre
La manera en qu se accede a las variables globales y a los campos de las tablas puede ser cambiada
mediante metatablas. Un acceso a la variable indexada t[i] equivale a una llamada a
gettable_event(t,i) (vase 2.8 para una completa descripcin de la funcin gettable_event.
EstafuncinnoestdefinidaniesinvocabledesdeLua.Seusaaqusloconpropsitosilustrativos).
TodaslasvariablesglobalessealmacenancomocamposdetablasordinariasenLua,denominadastablas
deentornoosimplementeentornos(vase2.9).Cadafuncintienesupropiareferenciaaunentorno,as
que todas las variables globales de esta funcin se refieren a esa tabla de entorno. Cuando se crea una
funcin,staheredaelentornodelafuncinquelacre.Paraobtenerlatabladeentornodeunafuncin
en cdigo Lua, se invoca a getfenv. Para reemplazarla se llama a setfenv. (Se pueden manejar los
entornosdeunafuncinC,perosloatravsdelabibliotecadedepuracinvase5.9.)
Unaccesoalavariableglobalxequivalea_env.x,queasuvezequivalea
gettable_event(_env, "x")
donde _env es el entorno de la funcin que se est ejecutando en ese momento (vase 2.8 para una
completadescripcindelafuncingettable_event.Estafuncinnoestdefinidaniesinvocabledesde
Lua.Igualmente,lavariable_envnoestdefinidaenLua.Seusanaqusloconpropsitosilustrativos.)

2.4Sentencias
https://www.lua.org/manual/5.1/es/manual.html#2.1

4/72

26/5/2016

Manual de Referencia de Lua 5.1

Luasoportaunconjuntocasiconvencionaldesentencias,similaralosdePascaloC.Esteconjuntoincluye
laasignacin,estructurasdecontroldeflujo,llamadasafunciones,constructoresdetablasydeclaraciones
devariables.

2.4.1Chunks
LaunidaddeejecucinenLuasedenominachunk,elcualessimplementeunconjuntodesentenciasque
seejecutansecuencialmente.Cadasentenciapuedellevaropcionalmentealfinalunpuntoycoma:
chunk ::= {sentencia [';']}
NoexistensentenciasvacasenLuayportanto';;'noeslegal.
Luamanejacadachunk como el cuerpo de una funcin annima con un nmero variable de argumentos
(vase2.5.9).Loschunkspuedendefinirvariableslocales,recibirargumentosyretornarvalores.
Unchunkpuedeseralmacenadoenunficherooenunstringdentrodeunprogramaanfitrin.Cuandose
ejecutaunchunkprimeroseprecompila,crendoseinstruccionesparaunamquinavirtual,yesentonces
cuandoelcdigocompiladoesejecutadoporunintrpretedelamquinavirtual.
Los chunks pueden tambin estar precompilados en forma binaria vase el programa luac para ms
detalles. Las formas fuente y compilada de los programas son intercambiables Lua detecta
automticamenteeltipodeficheroyactademaneraacorde.

2.4.2Bloques
Unbloqueesunalistadesentenciassintcticamenteunbloqueeslomismoqueunchunk:
bloque ::= chunk
Unbloquepuedeserdelimitadoexplcitamenteparaproducirunasentenciasimple:
sentencia ::= do bloque end
Los bloques explcitos son tiles para controlar el mbito de las declaraciones de variable. Tambin se
utilizanavecesparaaadirsentenciasreturnobreakenmediodeotrobloque(vase2.4.4).

2.4.3Laasignacin
Luapermiteasignacionesmltiples.Portantolasintaxisdeunaasignacindefineunalistadevariablesala
izquierda y una lista de expresiones a la derecha. Los elementos de ambas listas estn separados por
comas:
sentencia ::= varlist '=' explist
varlist ::= var {',' var}
explist ::= exp {',' exp}
Lasexpresionesseanalizanen2.5.
Antesdeunaasignacinlalistadeexpresionesseajustaalalongituddelalistadevariables.Siexisten
msvaloresdelosnecesarioselexcesosedescarta.Siexistenmenosvaloresdelosnecesarioslalistase
extiendecontantosvaloresnilcomosenecesiten.Silalistadeexpresionesfinalizaconunallamadaauna
funcinentoncestodoslosvaloresdevueltosenlallamadapuedenentrarenlalistadevaloresantesdel
ajuste(exceptocuandoseencierraentreparntesisvase2.5).
La sentencia de asignacin primero evala todas sus expresiones y slo despus se hace la asignacin.
Entonces,elcdigo
i=3
i, b[i] = i+1, 20
asigna20ab[3],sinafectarab[4]debidoaqueienb[i]seevala(a3)antesdequeseleasigneel
valor4.Similarmente,lalnea
x, y = y, x
https://www.lua.org/manual/5.1/es/manual.html#2.1

5/72

26/5/2016

Manual de Referencia de Lua 5.1

intercambialosvaloresdexey.
El mecanismo de asignacin a las variables globales y a los campos de tablas puede ser modificado
mediante metatablas. Una asignacin a una variable indexada t[i] = val equivale a
settable_event(t,i,val). (Vase 2.8 para una completa descripcin de la funcin
settable_event. Esta funcin no est definida ni es invocable desde Lua. Se usa slo con propsitos
ilustrativos.)
Una asignacin a la variable global x = val equivale a la asignacin _env.x = val, que a su vez
equivalena
settable_event(_env, "x", val)
donde_enveselentornodelafuncinqueestejecutndoseenesemomento.(Lavariable_envnoest
definidaenLua.Seutilizaaqusloconpropsitosilustrativos.)

2.4.4Estructurasdecontrol
Lasestructurasdecontrolif,whileyrepeattienenelsignificadohabitualylasintaxisfamiliar:
sentencia ::= while exp do bloque end
sentencia ::= repeat bloque until exp
sentencia ::= if exp then bloque {elseif exp then bloque} [else bloque] end
Luatienetambinunasentenciafor,endosformatos(vase2.4.5).
La condicin de una expresin de una estructura de control puede retornar cualquier valor. Tanto false
como nil se consideran falsos. Todos los valores diferentes de nil y false se consideran verdaderos (en
particular,elnmero0yelstringvacosontambinverdaderos).
Enelbuclerepeatuntilelbloqueinternonoacabaenlapalabraclaveuntilsinodetrsdelacondicin.
Deestamaneralacondicinpuedereferirseavariableslocalesdeclaradasdentrodelbloquedelbucle.
Laordenreturn se usa para devolver valores desde una funcin o un chunk (el cual es justamente una
funcin).Lasfuncionesyloschunkspuedenretornarmsdeunvalor,porloquelasintaxisparareturnes
sentencia ::= return [explist]
Laordenbreakseusaparaterminarlaejecucindelosbucleswhile,repeatyfor,saltandoalasentencia
quesiguedespusdelbucle:
sentencia ::= break
Unbreakfinalizaelbuclemsinternoqueestactivo.
Las rdenes return y break pueden aparecer slo como ltima sentencia dentro de un bloque. Si se
necesita realmente un return o un break en medio de un bloque se debe usar un bloque ms interno
explcitamente,comoen'do return end'y'do break end',debido aque asreturnybreaksonlas
ltimassentenciasensupropiobloque.

2.4.5Lasentenciafor
Lasentenciafortienedosformas:unanumricayotragenrica.
La forma numrica del bucle for repite un bloque mientras una variable de control sigue una progresin
aritmtica.Tienelasintaxissiguiente:
sentencia ::= for nombre '=' exp1 ',' exp2 [',' exp3] do bloque end
Elbloque se repite para los valores de nombre comenzando en exp1 hasta que sobrepasa exp2 usando
comopasoexp3.Msprecisamenteunasentenciaforcomo
for v = e1, e2, e3 do bloque end
equivalealcdigo:
https://www.lua.org/manual/5.1/es/manual.html#2.1

6/72

26/5/2016

Manual de Referencia de Lua 5.1

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
local v = var
bloque
var = var + step
end
end
Nteselosiguiente:
Todas las expresiones de control se evalan slo una vez, antes de que comience el bucle. Deben
resultartodasennmeros.
var,limitystepsonvariablesinvisibles.Losnombresaparecenaqusloconpropsitosilustrativos.
Silaterceraexpresin(elpaso)estausenteseutilizapaso1.
Sepuedeutilizarbreakparasalirdelbuclefor.
Lavariabledecontrolveslocaldentrodelbuclenosepuedeutilizarsuvalordespusdequefinalice
elbucleforodespusdeunasalidadelmismoconbreak.Sisenecesitaelvalordelavariablevar
entoncesdebeasignarseaotravariableantesdelbreakodelasalidadelbucle.
Lasentenciaforgenricatrabajaconfunciones,denominadasiteradores.Encadaiteracinseinvocaala
funciniteradorqueproduceunnuevovalor,parndoselaiteracincuandoelnuevovaloresnil.Elbucle
forgenricotienelasiguientesintaxis:
sentencia ::= for lista_de_nombres in explist do bloque end
lista_de_nombres ::= nombre {',' nombre}
Unasentenciaforcomo
for var_1, ..., var_n in explist do bloque end
equivalealcdigo:
do
local f, s, var = explist
while true do
local var_1, ... , var_n = f(s, var)
var = var_1
if var == nil then break end
bloque
end
end
Nteselosiguiente:
explistseevalaslounavez.Susresultadossonunafunciniterador,unestadoyunvalorinicial
paralaprimeravariableiteradora.
f,syvarsonvariablesinvisibles.Losnombresqueaquaparecensonsloilustrativos.
Sepuedeusarunaordenbreakparasalirdelbuclefor.
Las variables de control del bucle var_i son locales en el bucle no se pueden usar sus valores
despusdequeacabeelbuclefor. Si se necesitan sus valores se deben asignar a otras variables
antesdequesesalgadelbucle(normalmenteoconunbreak).

2.4.6Sentenciasdellamadasafuncin
Paraevitarposiblesefectoslaterales,lasllamadasafuncinpuedenserrealizadascomosentencias:
sentencia ::= llamada_a_func
Enesecasotodoslosvaloresretornadossedescartan.Lasllamadasafuncinestnexplicadasen2.5.8.

2.4.7Declaracioneslocales
https://www.lua.org/manual/5.1/es/manual.html#2.1

7/72

26/5/2016

Manual de Referencia de Lua 5.1

Las variables locales pueden ser declaradas en cualquier lugar dentro de un bloque. Esas declaraciones
puedenincluirunaasignacininicial:
sentencia ::= local lista_de_nombres ['=' explist]
Si est presente, una asignacin inicial tiene la misma semntica que una asignacin mltiple (vase
2.4.3).Enotrocasotodaslasvariablessoninicializadasconnil.
Unchunkestambinunbloque(vase2.4.1),asquelasvariableslocalespuedenserdeclaradasenun
chunkfueradecualquierbloqueexplcito.Elmbitodeesasvariablesseextiendehastaelfinaldelchunk.
Lasreglasdevisibilidadparalasvariableslocalesseexponenen2.6.

2.5Expresiones
LasexpresionesbsicasenLuasonlassiguientes:
exp ::= prefixexp
exp ::= nil | false | true
exp ::= Nmero
exp ::= String
exp ::= func
exp ::= constructor_de_tabla
exp ::= '...'
exp ::= exp operador_binario exp
exp ::= operador_unario exp
prefixexp ::= var | llamada_a_func | '(' exp ')'
Los nmeros y los string literales se explican en 2.1 las variables se explican en 2.3 la definicin de
funcionesseexplicaen2.5.9lasllamadasafuncinseexplicanen2.5.8losconstructoresdetablasse
explican en 2.5.7. Las expresiones vararg (que indican un nmero variable de argumentos en una
funcin), denotadas mediante tres puntos ('...'), pueden ser usadas directamente slo cuando estn
dentrodelasfuncionesconvarargseexplicanen2.5.9.
Los operadores binarios comprenden los operadores aritmticos (vase 2.5.1), los operadores
relacionales(vase2.5.2)ylosoperadoreslgicos(vase2.5.3).Losoperadoresunarioscompendenel
menosunario(vase2.5.1),elnotunario(vase2.5.3)yeloperadordelongitudunario(vase2.5.5).
Tanto las llamadas a funcin como las expresiones vararg pueden resultar en valores mltiples. Si la
expresin se usa como una sentencia (vase 2.4.6) (slo posible con llamadas a funcin), entonces su
lista de valores retornados se ajusta a cero elementos, descartando todos los valores retornados. Si la
expresin se usa como el ltimo (o nico) elemento de una lista de expresiones entonces no se realiza
ningn ajuste (a no ser que la llamada se encierre entre parntesis). En todos los dems contextos Lua
ajustaelresultadodelalistaaunsoloelemento,descartandotodoslosvaloresexceptoelprimero.
Heaquvariosejemplos:
f()
g(f(), x)
g(x, f())
a,b,c = f(), x
a,b = ...

a,b,c = x, f()
a,b,c = f()
return f()
return ...
return x,y,f()
{f()}
{...}
{f(), nil}

-- ajustado a 0 resultados
-- f() es ajustado a 1 resultado
-- g toma x y todos los valores devueltos por f()
-- f() se ajusta a 1 resultado (c toma el valor nil)
-- a toma el primer argumento vararg, b toma
-- el segundo (a y b pueden ser nil si no existen los
-- correspondientes argumentos vararg)
-- f() se ajusta a 2 resultados
-- f() se ajusta a 3 resultados
-- retorna todos los valores devueltos por f()
-- retorna todos los argumentos vararg recibidos
-- retorna x, y, y todos los valores devueltos por f()
-- crea una lista con todos los valores retornados por f()
-- crea una lista con todos los argumentos vararg
-- f() se ajusta a 1 resultado

https://www.lua.org/manual/5.1/es/manual.html#2.1

8/72

26/5/2016

Manual de Referencia de Lua 5.1

Unaexpresinencerradaenparntesissiempreresultaenunnicovalor.Entonces,(f(x,y,z))siempre
esunvalornico,inclusosifretornavariosvalores.(Elvalorde(f(x,y,z))eselprimervalorretornado
porfonilsifnoretornaningnvalor).

2.5.1Operadoresaritmticos
Luatienelosoperadoresaritmticoscomunes:losbinarios+(adicin),-(substraccin),*(multiplicacin),
/ (divisin), % (mdulo) y ^ (exponenciacin) y el unario - (negacin). Si los operandos son nmeros o
stringsqueseconviertenanmeros(vase2.2.1), entonces todas las operaciones tienen el significado
corriente.Laexponenciacintrabajaconcualquierexponente.Porejemplo,x^(-0.5)calculalainversade
laraizcuadradadex.Elmdulosedefinecomo
a % b == a - math.floor(a/b)*b
Estoes,eselrestodeladivisinqueredondeaelcocientehaciamenosinfinito.

2.5.2Operadoresrelacionales
LosoperadoresrelacionalesenLuason
==

~=

<

>

<=

>=

Devuelvensiempreunresultadofalseotrue.
La igualdad (==) primero compara el tipo de los operandos. Si son diferentes entonces el resultado es
false.Enotrocasosecomparanlosvaloresdelosoperandos.Losnmerosylosstringssecomparandela
manerausual.Losobjetos(tablas,userdata,procesosyfunciones)secomparanporreferencia:dosobjetos
se consideran iguales slo si son el mismo objeto. Cada vez que se crea un nuevo objeto (una tabla,
userdata,procesoofuncin)estenuevoobjetoesdiferentedetodoslosdemsobjetospreexistentes.
Se puede cambiar la manera en que Lua compara tablas y userdata usando el metamtodo "eq" (vase
2.8).
Lasreglasdeconversinde2.2.1noseaplicanenlascomparacionesdeigualdad.Deestemodo"0"==0
esfalse,yt[0]yt["0"]denotandiferentesentradasenunatabla.
Eloperador~=esexactamentelanegacindelaigualdad(==).
Elordendelosoperadoresfuncionadelasiguientemanera.Siambosargumentossonnmerosentonces
se comparan como tales. En otro caso, si ambos argumentos son strings sus valores se comparan de
acuerdoalsistemalocal.Enotrocaso,Luatratadeusarlosmetamtodos"lt"o"le"(vase2.8).

2.5.3Operadoreslgicos
LosoperadoreslgicosenLuasonand,orynot.Comolasestructurasdecontrol(vase2.4.4)todoslos
operadoreslgicosconsideranfalseynilcomofalsoytodolodemscomoverdadero.
El operador negacin not siempre retorna false o true. El operador conjuncin and retorna su primer
operando si su valor es false o nil en caso contrario and retorna su segundo operando. El operador
disyuncinorretornasuprimeroperandosisuvaloresdiferentedenilyfalseencasocontrarioorretorna
susegundoargumento.Tantoandcomoorusanevaluacindecortocircuitoestoes,susegundooperando
seevalaslosiesnecesario.Heaquvariosejemplos:
10 or 20
10 or error()
nil or "a"
nil and 10
false and error()
false and nil
false or nil
10 and 20

--> 10
--> 10
--> "a"
--> nil
--> false
--> false
--> nil
--> 20

(Enestemanual'-->'indicaelresultadodelaexpresinprecedente.)
https://www.lua.org/manual/5.1/es/manual.html#2.1

9/72

26/5/2016

Manual de Referencia de Lua 5.1

2.5.4Concatenacin
EloperadordeconcatenacindestringsenLuasedenotamediantedospuntosseguidos('..').Siambos
operandos son strings o nmeros entonces se convierten a strings mediante las reglas mencionadas en
2.2.1.Enotrocasoseinvocaalmetamtodo"concat"(vase2.8).

2.5.5Eloperadorlongitud
El operador longitud se denota mediante #. La longitud de un string es su nmero de bytes (significado
normaldelalongituddeunstringcuandocadacarcterocupaunbyte).
La longitud de una tabla t se define como un ndice entero n tal que t[n] no es nil y t[n+1] es nil
adems,sit[1]esnilentoncesnpuedesercero.Paraunarrayregular,convaloresnonildesde1hasta
unndado,lalongitudesexactamenten,elndiceessultimovalor.Sielarraytiene"agujeros"(estoes,
valores nil entre otros valores que no lo son), entonces #t puede ser cualquiera de los ndices que
precedenaunvalornil(estoes,Luapuedeconsideraresevalornilcomoelfinaldelarray).

2.5.6Precedenciadelosoperadores
La precedencia de los operadores en Lua sigue lo expuesto en la tabla siguiente de menor a mayor
prioridad:
or
and
<
..
+
*
not
^

>

<=

>=

~=

/
#

%
- (unario)

==

Comoesusual,sepuedenusarparntesisparacambiarlaprecedenciaenunaexpresin.Losoperadores
de concatenacin ('..') y de exponenciacin ('^') son asociativos por la derecha. Todos los dems
operadoressonasociativosporlaizquierda.

2.5.7Constructoresdetabla
Los constructores de tabla son expresiones que crean tablas. Cada vez que se evala un constructor se
creaunanuevatabla.Losconstructorespuedenserusadosparacreartablasvacasoparacreartablase
inicializaralgunodesuscampos.Lasintaxisgeneralparaesosconstructoreses
constructor_de_tabla ::= '{' [lista_de_campos] '}'
lista_de_campos ::= campo {separador_de_campos campo} [separador_de_campos]
campo ::= '[' exp ']' '=' exp | nombre '=' exp | exp
separador_de_campos ::= ',' | ';'
Cadacampodelaforma[exp1] = exp2aadeunaentradaalanuevatablaconlaclaveexp1yconel
valorexp2.Uncampodelaformanombre = expequivalea["nombre"] = exp.Finalmente,campos
delaformaexpsonequivalentesa[i] = exp,dondeisonnmerosenterosconsecutivos,comenzando
con1.Loscamposenelotroformatonoafectanestecontador.Porejemplo,
a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }
equivalea
do
local t = {}
t[f(1)] = g
t[1] = "x"
t[2] = "y"
t.x = 1
t[3] = f(x)
t[30] = 23

-- 1 exp
-- 2 exp
-- t["x"] = 1
-- 3 exp

https://www.lua.org/manual/5.1/es/manual.html#2.1

10/72

26/5/2016

Manual de Referencia de Lua 5.1

t[4] = 45
a=t
end

-- 4 exp

Sielltimocampoenlalistatienelaformaexpylaexpresinesunallamadaafuncinounaexpresin
vararg, entonces todos los valores retornados por esta expresin entran en la lista consecutivamente
(vase 2.5.8). Para evitar esto debe encerrarse la llamada a la funcin (o la expresin vararg) entre
parntesis(vase2.5).
La lista de campos puede tener un separador opcional al final, una conveniencia para cdigo fuente
generadodemaneraautomtica.

2.5.8Llamadasafuncin
UnallamadaaunafuncintieneenLualasiguientesintaxis:
llamada_a_func ::= prefixexp argumentos
Enunallamadaafuncin,seevalanprimeroprefixexpylosargumentos.Si el valor de prefixexpesdel
tipofunction,entoncesseinvocaaestafuncinconlosargumentosdados.Encasocontrarioseinvocael
metamtodo "call", pasando como primer argumento el valor de prefixexp seguido por los argumentos
originalesdelallamada(vase2.8).
Laforma
llamada_a_func ::= prefixexp ':' nombre argumentos
puede ser usada para invocar "mtodos". Una llamada v:nombre(...) es otra manera de expresar
v.nombre(v,...),exceptoquevseevalaslounavez.
Losargumentostienenlasiguientesintaxis:
argumentos ::= '(' [explist] ')'
argumentos ::= constructor_de_tabla
argumentos ::= String
Todoslosargumentosdelaexpresinseevalanantesdelallamada.Unllamadadelaformaf{...}es
otra manera de expresar f({...}) esto es, la lista de argumentos es una nueva tabla simple. Una
llamadadelaformaf'...'(of"..."of[[...]])esotramaneradeexpresarf('...')estoes,la
listadeargumentosesunstringliteralsimple.
ComoexcepcinalasintaxisdeformatolibredeLua,nosepuedeponerunaroturadelneaantesde'('en
unallamadaafuncin.Estarestriccinevitaalgunasambigedadesenellenguaje.Siseescribe
a=f
(g).x(a)
Lua podra ententerlo como una sentencia simple, a = f(g).x(a). Entonces, si se desean dos
sentenciassedebeaadirunpuntoycomaentreellas.Sirealmentesedeseallamaraf,sedebeeliminar
laroturadelneaantesde(g).
Una llamada de la forma return llamada_a_func se denomina una llamada de cola. Lua implementa
llamadas de cola correctas (o recursin de cola correcta): en una llamada de cola la funcin invocada
reutilizalaentradaenlapiladelafuncinquelaestllamando.Portantonoexistelmiteenelnmerode
llamadas de cola anidadas que un programa puede ejecutar. Sin embargo una llamada de cola borra
cualquierinformacindedepuracinrelativaalafuncininvocante.Ntesequeunallamadadecolaslo
ocurreconunasintaxisparticulardondeelreturntieneunallamadasimpleafuncincomoargumentoesta
sintsishacequelafuncininvocantedevuelvaexactamenteelretornodelafuncininvocada.Segnesto
ningunodelossiguientesejemplossonllamadasdecola:
return (f(x))
return 2 * f(x)
return x, f(x)
f(x); return

-- resultados ajustados a 1
-- resultados adicionales
-- resultados descartados

https://www.lua.org/manual/5.1/es/manual.html#2.1

11/72

26/5/2016

Manual de Referencia de Lua 5.1

return x or f(x)

-- resultados ajustados a 1

2.5.9Definicindefunciones
Lasintaxisparaladefinicindefuncioneses
func ::= function cuerpo_de_func
cuerpo_de_func ::= '(' [lista_de_argumentos] ')' bloque end
Lasiguienteformasimplificaladefinicindefunciones:
sentencia ::= function nombre_de_func cuerpo_de_func
sentencia ::= local function nombre cuerpo_de_func
nombre_de_func ::= nombre {'.' nombre} [':' nombre]
Lasentencia
function f () cuerpo_de_funcin end
setraduceen
f = function () cuerpo_de_funcin end
Lasentencia
function t.a.b.c.f () cuerpo_de_funcin end
setraduceen
t.a.b.c.f = function () cuerpo_de_funcin end
Lasentencia
local function f () cuerpo_de_funcin end
setraduceen
local f; f = function () cuerpo_de_funcin end
noen:
local f = function () cuerpo_de_funcin end
(Estosloentraadiferenciascuandoelcuerpodelafuncincontienereferenciasaf.)
Una definicin de funcin es una expresin ejecutable, cuyo valor tiene el tipo function. Cuando Lua
precompila un chunk todos sus cuerpos de funcin son tambin precompilados. Entonces cuando Lua
ejecutaladefinicindefuncin,lamismaesinstanciada(ocerrada).Estainstanciadefuncin(oclosure)
es el valor final de la expresin. Diferentes instancias de la misma funcin pueden referirse a diferentes
variableslocalesexternasypuedentenerdiferentestablasdeentorno.
Los argumentos formales de una funcin actan como variables locales que son inicializadas con los
valoresactualesdelosargumentos:
lista_de_argumentos ::= lista_de_nombres [',' '...'] | '...'
Cuando se invoca una funcin, la lista de argumentos actuales se ajusta a la longitud de la lista de
argumentosformales,anoserquelafuncinseadetipovararg,loqueseindicaportrespuntos('...')al
finaldelalistadeargumentosformales.Unafuncinvarargnoajustasulistadeargumentosensulugar
recolectatodoslosargumentosactualesextrayselospasaalafuncinatravsdeunaexpresinvararg,
lo que tambin se indica por medio de tres puntos. El valor de esta expresin es una lista de todos los
argumentosactualesextra,similaraunafuncinconresultadosmltiples.Silaexpresinvarargseusaen
elinteriordeotraexpresinoenelmediodeunalistadeexpresiones,entoncessuretornoseajustaaun
sloelemento.Silaexpresinesusadacomoelltimoelementodeunalistadeexpresionesentoncesno
sehaceningnajuste(anoserquelallamadaserealiceentreparntesis).
https://www.lua.org/manual/5.1/es/manual.html#2.1

12/72

26/5/2016

Manual de Referencia de Lua 5.1

Comoejemplo,consideremoslassiguientesdefiniciones:
function f(a, b) end
function g(a, b, ...) end
function r() return 1,2,3 end
Entoncestenemoslasiguientecorrespondenciadelosargumentosactualesalosformalesyalaexpresin
vararg:
LLAMADA

ARGUMENTOS

f(3)
f(3, 4)
f(3, 4, 5)
f(r(), 10)
f(r())

a=3, b=nil
a=3, b=4
a=3, b=4
a=1, b=10
a=1, b=2

g(3)
g(3, 4)
g(3, 4, 5, 8)
g(5, r())

a=3, b=nil, ... -->


a=3, b=4, ... -->
a=3, b=4, ... -->
a=5, b=1, ... -->

(nada)
(nada)
5 8
2 3

Losresultadossedevuelvenusandolasentenciareturn(vase2.4.4).Sielflujodelprogramaalcanzael
finaldeunafuncinsinencontrarunasentenciareturnentonceslafuncinretornasinresultados.
Lasintaxiscondospuntos(':') se usapara definir mtodos,estoes,funcionesquetienenunargumento
extradenominadoself.Entonceslasentencia
function t.a.b.c:f (params) cuerpo_de_funcin end
esotramaneradeexpresar
t.a.b.c.f = function (self, params) cuerpo_de_funcin end

2.6Reglasdevisibilidad
Luaesunlenguajeconmbitolxico.Elmbitodelasvariablescomienzaenlaprimerasentenciadespus
de su declaracin y termina al final del bloque ms interno que incluya la declaracin. Consideremos el
siguienteejemplo:
x = 10
do
local x = x
print(x)
x = x+1
do
local x = x+1
print(x)
end
print(x)
end
print(x)

-- variable global
-- nuevo bloque
-- nueva 'x', con valor 10
--> 10
-- otro bloque
-- otra 'x'
--> 12
--> 11
--> 10 (el valor de la variable global)

Tengasepresentequeenunadeclaracincomolocal x = x,lanuevaxqueestsiendodeclaradano
tienembitotodava,ylasegundaxserefierealavariableexterna.
Debidoalasreglasdembitolxico,lasvariableslocalespuedenseraccedidasporfuncionesdefinidasen
el interior de su propio mbito. Una variable local usada en una funcin interna se denomina upvalue o
variablelocalexternaenelinteriordelafuncin.
Ntese que cada ejecucin de una sentencia local define nuevas variables locales. Considrese el
siguienteejemplo:
a = {}
https://www.lua.org/manual/5.1/es/manual.html#2.1

13/72

26/5/2016

Manual de Referencia de Lua 5.1

local x = 20
for i=1,10 do
local y = 0
a[i] = function () y=y+1; return x+y end
end
Elbuclecreadiezclosures(estoes,diezinstanciasdeunafuncinannima).Cadaunodeestasinstancias
usaunavariableydiferente,mientrasquetodasellascompartenlamismax.

2.7Manejodeerrores
DebidoaqueLuaesunlenguajedeextensinembebido,todaslasaccionesdeLuacomienzanconcdigo
CenelprogramaanfitrinllamandoaunafuncindelabibliotecadeLua(vaselua_pcall).Cadavez
queocurraunerrordurantelacompilacinoejecucindeLua,elcontrolretornaaC,quepuedetomarlas
medidasapropiadas(talescomoimprimirunmensajedeerror).
Se puede generar (o activar) explcitamente en Lua un error invocando la funcin error. Si se necesita
capturarerroresenLuasepuedeusarlafuncinpcall.

2.8Metatablas
Cada valor en Lua puede tener una metatabla. sta es una tabla ordinaria de Lua que define el
comportamientodelvalororiginalparaciertasoperacionesespeciales.Sepuedencambiarvariosaspectos
delcomportamientodelasoperacionesrealizadassobreunvalorestableciendocamposespecficosensu
metatabla. Por ejemplo, cuando un valor no numrico es un operando de una adicin Lua busca una
funcinenelcampo"__add"desumetatabla.Siseencuentrauna,entoncesseinvocaesafuncinpara
realizarlaadicin.
Llamamoseventosaloscamposdeunametatablayalosvaloreslosdenominamosmetamtodos.Enel
ejemploanterioreleventoes"add"mientrasqueelmetamtodoeslafuncinquerealizalaadicin.
Sepuedesolicitarlametatabladecualquiervaloratravsdelafuncingetmetatable.
Se puede reemplazar la metatabla de una tabla a travs de la funcin setmetatable. No se puede
cambiarlametatabladeotrostiposdedatosdesdeLua(exceptousandolabibliotecadedepuracin)se
debeusarlaAPIdeCparaello.
Las tablas y los userdata completos tienen metatablas individuales (aunque varias tablas y userdata
puedencompartirsusmetatablas)losvaloresdelosotrostiposcompartenunanicametatablaportipo.
Portanto,existeunanicametatablaparatodoslosnmeros,otraparatodoslosstrings,etc.
Una metatabla puede controlar cmo se comporta un objeto en las operaciones aritmticas, en las
comparaciones de orden, en la concatenacin, en la operacin longitud y en el indexado. Una metatabla
puede tambin definir una funcin que ser invocada cuando se libera memoria ocupada (garbage
collection)poruserdata.AcadaunadeesasoperacionesLualeasociaunaclaveespecficadenominada
evento.CuandoLuarealizaunadeesasoperacionesconunvalor,compruebasistetieneunametatabla
conelcorrespondienteevento.Siesas,elvalorasociadoconesaclave(elmetamtodo) controla cmo
realizaLualaoperacin.
Las metatablas controlan las operaciones listadas a continuacin. Cada operacin se identifica por su
correspondientenombre.Laclaveasociadaacadaoperacinesunstringconsunombreprefijadocondos
subrayados,'__'porejemplo,laclaveparalaoperacin"add"eselstring"__add".Lasemnticadeesas
operaciones est mejor expuesta a travs de una funcin Lua que describe cmo ejecuta el intrprete la
operacin.
ElcdigoLuamostradoaquessloilustrativoelcomportamientorealestcodificadointernamenteenel
intrprete y es mucho ms eficiente que esta simulacin. Todas las funciones usadas en estas
descripciones (rawget, tonumber, etc.) estn descritas en 5.1. En particular, para recuperar el
metamtododeunobjetodado,usamoslaexpresin
metatable(objeto)[evento]
Estopuedetambinserexpresadomediante
https://www.lua.org/manual/5.1/es/manual.html#2.1

14/72

26/5/2016

Manual de Referencia de Lua 5.1

rawget(getmetatable(objeto) or {}, evento)


Por tanto, el acceso a un metamtodo no invoca otros metamtodos, y el acceso a los objetos sin
metatablasnofalla(simplementedevuelvenil).
"add":Laoperacin+.
La funcin getbinhandler que aparece ms abajo define cmo escoge Lua un manejador de la
operacinbinaria.PrimeroLuapruebaelprimeroperando.Sisutiponodefineunmanejadorparala
operacinentoncesLualointentaconelsegundooperando.
function getbinhandler (op1, op2, evento)
return metatable(op1)[evento] or metatable(op2)[evento]
end
Usandoestafuncinelcomportamientodelcdigoop1 + op2es
function add_event (op1, op2)
local o1, o2 = tonumber(op1), tonumber(op2)
if o1 and o2 then -- son numricos ambos operandos?
return o1 + o2 -- '+' aqu es la primitiva 'add'
else -- al menos uno de los operandos es no numrico
local h = getbinhandler(op1, op2, "__add")
if h then
-- invoca el manejador de ambos operandos
return (h(op1, op2))
else -- no existe un manejador disponible: comportamiento por defecto
error()
end
end
end
"sub":Laoperacin-.Elcomportamientoessimilaralaoperacin"add".
"mul":Laoperacin*.Elcomportamientoessimilaralaoperacin"add".
"div":Laoperacin/.Elcomportamientoessimilaralaoperacin"add".
"mod": La operacin %. El comportamiento es similar a la operacin "add", usando o1 floor(o1/o2)*o2comooperacinprimitiva.
"pow": La operacin ^ (exponenciacin). El comportamiento es similar a la operacin "add", con la
funcinpow(delabibliotecamatemticadeC)comooperacinprimitiva.
"unm":Laoperacin-unaria.
function unm_event (op)
local o = tonumber(op)
if o then -- es numrico el operando?
return -o -- '-' aqu es la funcin primitiva 'unm'
else -- el operando no es numrico.
-- intentar obtener un manejador para el operando
local h = metatable(op).__unm
if h then
-- invocar el manejador con el operando
return (h(op))
else -- no hay manejador disponible: comportamiento por defecto
error()
end
end
end
"concat":Laoperacin..(concatenacin).
function concat_event (op1, op2)
https://www.lua.org/manual/5.1/es/manual.html#2.1

15/72

26/5/2016

Manual de Referencia de Lua 5.1

if (type(op1) == "string" or type(op1) == "number") and


(type(op2) == "string" or type(op2) == "number") then
return op1 .. op2 -- concatenacin primitiva de strings
else
local h = getbinhandler(op1, op2, "__concat")
if h then
return (h(op1, op2))
else
error()
end
end
end
"len":Laoperacin#.
function len_event (op)
if type(op) == "string" then
return strlen(op)
-- longitud primitiva de string
elseif type(op) == "table" then
return #op
-- longitud primitiva de tabla
else
local h = metatable(op).__len
if h then
-- invocar el manejador con el operando
return (h(op))
else -- no hay manejador disponible: comportamiento por defecto
error()
end
end
end
Vase2.5.5paraunadescripcindelalongituddeunatabla.
"eq":Laoperacin==.LafuncingetcomphandlerdefinecmoeligeLuaunmetamtodoparael
operadordecomparacin.Seseleccionaunmetamtodocuandoambosobjetosquesoncomparados
tienenelmismotipoyelmismometamtodoparalaoperacindada.
function getcomphandler (op1, op2, evento)
if type(op1) ~= type(op2) then return nil end
local mm1 = metatable(op1)[evento]
local mm2 = metatable(op2)[evento]
if mm1 == mm2 then return mm1 else return nil end
end
Elevento"eq"sedefineas:
function eq_event (op1, op2)
if type(op1) ~= type(op2) then -- diferentes tipos?
return false -- diferentes objetos
end
if op1 == op2 then -- iguales primitivas?
return true -- los objetos son iguales
end
-- probar un metamtodo
local h = getcomphandler(op1, op2, "__eq")
if h then
return (h(op1, op2))
else
return false
end
end
a ~= bequivaleanot (a == b).
https://www.lua.org/manual/5.1/es/manual.html#2.1

16/72

26/5/2016

Manual de Referencia de Lua 5.1

"lt":Laoperacin<.
function lt_event (op1, op2)
if type(op1) == "number" and type(op2) == "number" then
return op1 < op2 -- comparacin numrica
elseif type(op1) == "string" and type(op2) == "string" then
return op1 < op2 -- comparacin lexicogrfica
else
local h = getcomphandler(op1, op2, "__lt")
if h then
return (h(op1, op2))
else
error();
end
end
end
a > bequivaleab < a.
"le":Laoperacin<=.
function le_event (op1, op2)
if type(op1) == "number" and type(op2) == "number" then
return op1 <= op2 -- comparacin numrica
elseif type(op1) == "string" and type(op2) == "string" then
return op1 <= op2 -- comparacin lexicogrfica
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
a >= bequivaleab <= a.Tngasepresentequeenausenciadeunmetamtodo"le"Luaintenta
usarelde"lt",asumiendoquea <= bequivaleanot (b < a).
"index":Elaccesoindexadotabla[clave].
function gettable_event (tabla, clave)
local h
if type(tabla) == "table" then
local v = rawget(tabla, clave)
if v ~= nil then return v end
h = metatable(tabla).__index
if h == nil then return nil end
else
h = metatable(tabla).__index
if h == nil then
error();
end
end
if type(h) == "function" then
return (h(tabla, clave)) -- invocar el manejador
else return h[clave]
-- o repetir la operacin con l
end
https://www.lua.org/manual/5.1/es/manual.html#2.1

17/72

26/5/2016

Manual de Referencia de Lua 5.1

end
"newindex":Laasignacinindexadatabla[clave] = valor.
function settable_event (tabla, clave, valor)
local h
if type(tabla) == "table" then
local v = rawget(tabla, clave)
if v ~= nil then rawset(tabla, clave, valor); return end
h = metatable(tabla).__newindex
if h == nil then rawset(tabla, clave, valor); return end
else
h = metatable(tabla).__newindex
if h == nil then
error();
end
end
if type(h) == "function" then
h(tabla, clave, valor)
-- invoca el manejador
else h[clave] = valor
-- o repite la operacin con l
end
end
"call":invocadacuandoLuallamaaunvalor.
function function_event (func, ...)
if type(func) == "function" then
return func(...) -- llamada primitiva
else
local h = metatable(func).__call
if h then
return h(func, ...)
else
error()
end
end
end

2.9Entornos
Ademsdemetatablas,losobjetosdetipoproceso,lasfuncionesylosuserdatatienenotratablaasociada,
denominada entorno. Como las metatablas los entornos son tablas normales y varios objetos pueden
compartirelmismoentorno.
Los entornos asociados con userdata no tienen significado en Lua. Es slo una caracterstica para los
programadoresasociarunatablaconuserdata.
Los entornos asociados con procesos se denominan entornos globales. Son usados como entornos por
defectoparalosprocesosyparalasfuncionesnoanidadascreadasporelproceso(atravsdeloadfile,
loadstringoload)ypuedenseraccedidasdirectamenteporelcdigoenC(vase3.3).
Los entornos asociados con funciones C pueden ser accedidos directamente por el cdigo en C (vase
3.3).SonusadascomoentornospordefectoporotrasfuncionesCcreadasporlafuncindada.
LosentornosasociadosconfuncionesenLuasonutilizadospararesolvertodoslosaccesosalasvariables
globales dentro de la funcin (vase 2.3). Son usados tambin como entornos por defecto por otras
funcionesenLuacreadasporlafuncin.
Se puede cambiar el entorno de una funcin Lua o de un proceso en ejecucin invocando setfenv. Se
puede obtener el entorno de una funcin Lua o del proceso en ejecucin invocando getfenv. Para
manejarelentornodeotrosobjetos(userdata,funcionesC,otrosprocesos)sedebeusarlaAPIdeC.

https://www.lua.org/manual/5.1/es/manual.html#2.1

18/72

26/5/2016

Manual de Referencia de Lua 5.1

2.10Liberacindememorianoutilizada
Luarealizaautomticamentelagestindelamemoria.Estosignificaquenodebemospreocuparnosnide
asignar (o reservar) memoria para nuevos objetos ni de liberarla cuando los objetos dejan de ser
necesarios. Lua gestiona la memoria automticamente ejecutando un liberador de memoria (garbage
collector) de cuando en cuando para eliminar todos los objetos muertos (esos objetos que ya no son
accesiblesdesdeLua).TodoslosobjetosenLuasonsusceptiblesdegestinautomtica:tablas,userdata,
funciones,procesosystrings.
Lua implementa un liberador de memoria del tipo marcadobarrido incremental. Utiliza dos nmeros para
controlarsusciclosdeliberacindememoria:lapausadelliberadordememoriayelmultiplicadordelpaso
delliberadordememoria.
Lapausadelliberadordememoriacontrolacuntotiempodebeesperarelliberadordememoriaantesde
comenzar un nuevo ciclo. Valores grandes hacen al liberador menos agresivo. Valores menores que 1
significan que el liberador no esperar para comenzar un nuevo ciclo. Un valor de 2 significa que el
liberadoresperaquelamemoriatotalenusosedobleantesdecomenzarunnuevociclo.
Elmultiplicadordelpasocontrolalavelocidadrelativadelliberadorencuantoaasignacindememoria.Los
valores ms largos hacen el liberador ms agresivo pero tambin aumentan el tamao de cada paso
incremental.Valoresmenoresque1hacenelliberadordemasiadolentoypuederesultarenqueelliberador
nuncaacabeunciclo.Elnmeropordefecto,2,significaqueelliberadorseejecutaaunavelocidaddoble
quelaasignacindememoria.
SepuedencambiaresosnmerosinvocandoenCalua_gcoenLuaacollectgarbage.Ambostienen
como argumentos un porcentaje (y entonces un argumento 100 significa un valor real de 1). Con esas
funcionessepuedetambincontrolarelliberadordirectamente(porejemplo,pararloyreiniciarlo).

2.10.1Metamtodosdeliberacindememoria
Usando la API de C se pueden establecer metamtodos liberadores de memoria para userdata (vase
2.8). Esos metamtodos se denominan tambin finalizadores. stos permiten coordinar el sistema de
liberacindememoriadeLuacongestoresexternosderecursos(talescomocerrarficheros,conexionesde
redodebasesdedatos,oliberarsupropiamemoria).
Losuserdataquesevanaliberarconuncampo__gcensusmetatablasnosonliberadosinmediatamente
porelliberadordememoria.EnsulugarLualosponeenunalista.DespusdeesoLuahaceelequivalente
alasiguientefuncinparacadauserdataenlalista:
function gc_event (udata)
local h = metatable(udata).__gc
if h then
h(udata)
end
end
Alfinaldecadaciclodeliberacindememoria,losfinalizadoresdeuserdataqueaparecenenlalistaque
va a ser liberada son invocados en orden inverso al de su creacin. Esto es, el primer finalizador en ser
invocado es el que est asociado con el userdata creado en ltimo lugar por el programa. El propio
userdatapuedeserliberadosloenelprximociclodeliberacindememoria.

2.10.2Tablasdbiles
Unatabladbilesunatablacuyoselementossonreferenciasdbiles.Unareferenciadbilesignoradapor
el liberador de memoria. En otras palabras, si las nicas referencias a un objeto son referencias dbiles
entoncesseliberalamemoriaasociadaconesteobjeto.
Unatabladbilpuedetenerclavesdbiles,valoresdbilesoambascosas.Unatablaconclavesdbiles
permitelaliberacindesusclaves,peroprohibelaliberacindesusvalores.Unatablaconclavesdbilesy
valoresdbilespermitelaliberacintantodeclavescomodevalores.Encualquiercaso,yasealaclaveo
elvalorelliberado,elparcompletoeseliminadodelatabla.Ladebilidaddeunatablaestcontroladaporel
campo__modedesumetatabla.Sielcampo__modeesunstringquecontieneelcarcter'k',lasclaves
enlatablasondbiles.Si__modecontiene'v',losvaloresenlatablasondbiles.
https://www.lua.org/manual/5.1/es/manual.html#2.1

19/72

26/5/2016

Manual de Referencia de Lua 5.1

Despusdeusarunatablacomometatablanosedeberacambiarelvalordesucampo__mode.Encaso
contrarioelcomportamientodbildelastablascontroladasporesametatablaesindefinido.

2.11corutinas
Luatienecorutinas, tambin denominadasmultiprocesoscolaborativos. En Lua una corutina representa
un proceso de ejecucin independiente.A diferencia de los sistemas multiproceso, en Lua una corutina
slosuspendesuejecucininvocandodemaneraexplcitaunafuncinyield(cesin).
Sepuedencrearcorutinasconunallamadaacoroutine.create.Elnicoargumentodeestafuncin
esotrafuncinqueeslafuncinprincipaldelacorutina.
Cuandosellamaporprimeravezacoroutine.resume,pasndolecomoargumentoelprocesoretornado
porcoroutine.create, la corutina comienza a ejecutarse en la primera lnea de su funcin principal.
Losargumentosextrapasadosacoroutine.resumesepasanasuvezalafuncinprincipaldelaco
rutina. Despus de que la corutina empieza a ejecutarse lo hace hasta que termina o se produce una
cesindelcontroldeflujodelprograma.
Una corutina puede terminar su ejecucin de dos maneras: normalmente, cuando su funcin principal
retorna (explcita o implcitamente, despus de su ltima instruccin) y anormalmente, si se produjo un
errornoprotegido.Enelprimercaso,coroutine.resumedevuelvetrue,mscualquiervalorretornado
por la funcin principal de la corutina. En caso de error coroutine.resume devuelve false ms un
mensajedeerror.
Una corutina cede el control invocando a coroutine.yield. Cuando una corutina cede el control la
correspondiente coroutine.resume retorna inmediatamente, incluso si la cesin ocurre dentro de una
llamada a una funcin anidada (esto es, no en la funcin principal, sino en una funcin directa o
indirectamente invocada desde la funcin principal). En el caso de una cesin, coroutine.resume
tambindevuelvetrue,mscualesquieravalorespasadosacoroutine.yield.La prximavez quese
resumalamismacorutina,continuarsuejecucindesdeelpuntoenquefuerealizadalacesin,conla
llamadaacoroutine.yielddevolviendocualquierargumentoextrapasadoacoroutine.resume.
La funcin coroutine.wrap crea una corutina, justo igual que lo hara coroutine.create, pero en
lugar de retornar la corutina misma, devuelve una funcin que, cuando es invocada resume la corutina.
Cualesquiera argumentos pasados a esta funcin pasan como argumentos a coroutine.resume.
coroutine.wrapdevuelvetodoslosvaloresretornadosporcoroutine.resume,exceptoelprimero(el
cdigo booleano de error).A diferencia de coroutine.resume, coroutine.wrap no captura errores
cualquiererrorsepropagaalarutinainvocante.
Comoejemplo,considreseelsiguientecdigo:
function foo (a)
print("foo", a)
return coroutine.yield(2*a)
end
co = coroutine.create(function (a,b)
print("co-body", a, b)
local r = foo(a+1)
print("co-body", r)
local r, s = coroutine.yield(a+b, a-b)
print("co-body", r, s)
return b, "end"
end)
print("main", coroutine.resume(co, 1, 10))
print("main", coroutine.resume(co, "r"))
print("main", coroutine.resume(co, "x", "y"))
print("main", coroutine.resume(co, "x", "y"))
Cuandoseejecutaseproducelasiguientesalida:
co-body 1

10

https://www.lua.org/manual/5.1/es/manual.html#2.1

20/72

26/5/2016

Manual de Referencia de Lua 5.1

foo
2
main
true
co-body r
main
true
co-body x
main
true
main
false

4
11
-9
y
10
end
cannot resume dead coroutine

3Lainterfacedelprogramadeaplicacin
(API)
Esta seccin describe laAPI de C para Lua, esto es, el conjunto de funciones C disponibles para que el
programa anfitrin se comunique con Lua. Todas las funciones de la API y sus tipos y constantes
relacionadosestndeclaradasenelficherodecabeceralua.h.
Aunque se usa el trmino "function", algunas rutinas en laAPI pueden ser macros. Todas esas macros
usancadaunodesusargumentosexactamenteunavez(exceptosuprimerargumento,queessiempreel
estadodeLua),yportantonogeneranefectoslateralesocultos.
Como en la mayora de las bibliotecas de C, la funciones API de Lua no verifican la validez ni la
consistenciadesusargumentos.SinembargosepuedecambiarestecomportamientocompilandoLuacon
lasdefinicionesadecuadasparalamacroluai_apicheck,enelficheroluaconf.h.

3.1Lapila(stack)
LuausaunapilavirtualparapasarvaloresaydesdeC.Cadaelementoenestapilarepresentaunvalorde
Lua(nil,nmero,string,etc.).
SiemprequeLuallamealC,lafuncinllamadaobtieneunanuevapila,queesindependientedelaspilas
anteriores y de las pilas de las funciones C que todava estn activas. Esta pila contiene inicialmente
cualquierargumentodelafuncinCyesdondestacolocalosresultadosquedebenserdevueltosala
rutinainvocadora(vaselua_CFunction).
Porconveniencia,lamayoradelasoperacionesdepeticindelaAPInosiguenunadisciplinaestrictade
pila. En su lugar pueden referirse a cualquier elemento en la pila usando un ndice: un valor positivo
representa una posicin absoluta en la pila (comenzando en 1) un valor negativo representa un
desplazamiento relativo a la parte superior de la pila. Ms especficamente, si la pila tiene n elementos,
entonces el ndice 1 representa el primer elemento (esto es, el elemento que fue colocado primero en la
pila)yunndicenrepresentaelltimoelementounndice1tambinrepresentaelltimoelemento(esto
es,elelementoenlapartesuperior)yunndicenrepresentaelprimerelemento.Decimosqueunndice
esvlidositieneunvalorcomprendidoentre1ylapartesuperiordelapila(estoes,si1 abs(ndice)
top).

3.2Eltamaodelapila
Cuando el programador interacciona con laAPI de Lua es responsable de asegurar la consistencia. En
particular es responsable de controlar el crecimiento correcto de la pila. Se puede usar la funcin
lua_checkstackparahacercrecereltamaodelapila.
SiemprequeLuallamaalC,seaseguradequealmenosexistenLUA_MINSTACKposicionesdisponibles
en la pila. LUA_MINSTACK est definida como 20, as que normalmente el programador no tiene que
preocuparsedelespacioenlapila,anoserquesucdigotengabuclesquecoloquenelementosenlapila.
Lamayoradelasfuncionesdepeticinaceptancomondicecualquiervalordentrodelespaciodisponible
en la pila, o sea ndices hasta el mximo del tamao de la pila establecido mediante lua_checkstack.
Esos ndices se denominan ndices aceptables. Ms formalmente, definimos un ndice aceptable de la
siguientemanera:
(ndice < 0 && abs(ndice) <= top) ||
https://www.lua.org/manual/5.1/es/manual.html#2.1

21/72

26/5/2016

Manual de Referencia de Lua 5.1

(ndice > 0 && ndice <= stackspace)


Nteseque0noesnuncaunndiceaceptable.

3.3Pseudondices
Exceptoenloscasosenqueseindique,cualquierfuncinqueaceptandicesvlidostambinpuedeser
invocadaconpseudondices,loscualesrepresentanalgunosvaloresenLuaquesonaccesiblesdesdeel
cdigo en C pero que no estn en la pila. Los pseudondices son usados para acceder al entorno del
proceso,alentornodelafuncin,alregistroyalosupvaluesdeunafuncinC(vase3.4).
El entorno del proceso (donde "viven" las variables globales) est siempre en el pseudondice
LUA_GLOBALSINDEX.ElentornodeunafuncinCqueestenejecucinestsiempreenelpseudondice
LUA_ENVIRONINDEX.
Paraaccederycambiarelvalordeunavariableglobalsepuedenusaroperacionesnormalesdetablaenla
tabladeentorno.Porejemplo,paraaccederalvalordeunavariableglobalsehace
lua_getfield(L, LUA_GLOBALSINDEX, nombre_de_variable_global);

3.4InstanciasenC
Cuando se crea una funcin C es posible asociarle algunos valores, creando una instancia en C esos
valoressedenominanupvaluesysonaccesiblesalafuncinencualquiermomentoenqueseainvocada
(vaselua_pushcclosure).
SiemprequeseinvoqueaunafuncinCsusupvaluesselocalizanenpseudondicesespecficos.stosse
producen mediante la macro lua_upvalueindex. El primer valor asociado con una funcin est en la
posicin lua_upvalueindex(1), y as sucesivamente. Cualquier acceso a lua_upvalueindex(n),
donde n es mayor que el nmero de upvalues de la funcin actual produce un ndice aceptable pero
invlido.

3.5Elregistro
Lua proporciona un registro, una tabla predefinida que puede ser usada por cualquier cdigo en C para
almacenar cualquier valor que Lua necesite guardar. Esta tabla se localiza siempre en el pseudondice
LUA_REGISTRYINDEX.CualquierbibliotecadeCpuedealmacenardatosenestatabla,perodeberatener
cuidado de elegir claves diferentes de aqullas usadas por otras bibliotecas, para evitar conflictos.
Tpicamente se podra usar como clave un string conteniendo el nombre de la biblioteca o userdata
"ligeros"conladireccindeunobjetodeCenelcdigo.
Lasclavesdetipoenteroenelregistrosonusadascomomecanismoparareferenciar,implementadoenla
bibliotecaauxiliar,yportantonodeberanserusadosparaotrospropsitosdiferentes.

3.6ManejodeerroresenC
Internamente Lua usa la funcin de C longjmp para facilitar el manejo de errores. (Se puede tambin
elegirusardirectamenteexcepcionessisetrabajaenC++vaseelficheroluaconf.h.)CuandoLuase
encuentra con cualquier error (tal como un error de asignacin de memoria, un error de tipo, un error de
sintaxisounerrordeejecucin)entoncesactivaunerror,estoes,realizaunsaltolargoenlamemoria.Un
entornoprotegidousasetjmpparaestablecerunpuntoderecuperacincualquiererrorprovocaunsalto
alpuntoderecuperacinactivomsreciente.
MuchasfuncionesdelaAPIpuedenactivarunerror,porejemplodebidoaunproblemadeasignacinde
memoria.Ladocumentacindecadafuncinindicasipuedeactivarunerror.
DentrodeunafuncinCsepuedeactivarunerrorinvocandolua_error.

3.7Funcionesytipos
HeaqulalistadetodaslasfuncionesytiposdelaAPIdeCporordenalfabtico.Cadafuncintieneun
https://www.lua.org/manual/5.1/es/manual.html#2.1

22/72

26/5/2016

Manual de Referencia de Lua 5.1

indicadorcomoste:

[o,+p,x]

El primer campo, o, indica cuntos elementos elimina la funcin en la pila. El segundo campo, p, es
cuantos elementos coloca la funcin en la pila. (Toda funcin siempre coloca sus resultados despus de
eliminarsusargumentos.)Uncampodelaformax|ysignificaquelafuncinpuedecolocar(oeliminar)x
yelementos,dependiendodelasituacinunsignodeinterrogacin'?'significaquenosepuedeconocer
cuntos elementos coloca/elimina la funcin observando slo sus argumentos (por ejemplo, puede
depender de lo qu est en la pila). El tercer, campo x, indica si la funcin puede activar errores: '-'
significaquelafuncinnuncaactivaerrores'm'indicaquelafuncinpuedeactivarunerrorslodebidoa
falta de memoria 'e' indica que la funcin puede activar otros tipos de errores 'v' indica que la funcin
puedeactivarunerrorapropsito.

lua_Alloc
typedef void * (*lua_Alloc) (void *ud,
void *ptr,
size_t osize,
size_t nsize);
EltipodelafuncinquemanejalamemoriausadaporlosestadosdeLua.Lafuncinquemanejamemoria
debeproporcionarunafuncionalidadsimilararealloc,peronoexactamentelamisma.Susargumentos
son: ud, un puntero opaco pasado a lua_newstate ptr, un puntero al bloque que est siendo
reservado/reasignado/liberadoosize,eltamaooriginaldelbloquensize,elnuevotamaodelbloque.
ptr es NULL si y slo si osize es cero. Cuando nsize es cero, el manejador debe retornar NULL si
osizenoescerodebeserliberadoelbloqueapuntadoporptr.Cuandonsizenoesceroelmanejador
retorna NULL si y slo si no puede ejecutar la peticin. Cuando nsize no es cero y osize es cero el
manejador debera comportarse como malloc. Cuando nsize y osize no son cero, el manejador se
comportacomorealloc.Luaasumequeelmanejadornuncafallacuandoosize >= nsize.
He aqu una implementacin simple para la funcin manejadora de memoria. Es usada en la biblioteca
auxiliarporlua_newstate.
static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
(void) ud; (void) osize; /* no usadas */
if (nsize == 0) {
free(ptr);
return NULL;
}
else
return realloc(ptr, nsize);
}
Este cdigo asume que free(NULL) no tiene efecto y que realloc(NULL, size) es equivalente a
malloc(size).ANSICaseguraamboscomportamientos.

lua_atpanic
lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);

[0,+0,]

Estableceunanuevafuncindepnicoydevuelvelavieja.
Si ocurre un error fuera de cualquier entorno protegido Lua llama a la funcin pnico y luego invoca
exit(EXIT_FAILURE), saliendo por tanto de la aplicacin anfitriona. Si usa otra funcin de pnico
diferente,stapuedeevitarestasalidasinretorno(porejemplo,haciendounsaltolargo).
Lafuncindepnicopuedeaccederalmensajedeerrorenlapartesuperiordelapila.

lua_call
void lua_call (lua_State *L, int nargs, int nresults);

[(nargs+1),+nresults,e]

Llamaaunafuncin.

https://www.lua.org/manual/5.1/es/manual.html#2.1

23/72

26/5/2016

Manual de Referencia de Lua 5.1

Parallamaraunafuncinsedebeusarelsiguienteprotocolo:primero,lafuncinaserinvocadasecoloca
en la parte superior de la pila entonces, se colocan tambin en la pila los argumentos de la funcin en
ordendirectoestoes,elprimerargumentosecolocaprimero.Finalmente,sellamaalua_callnargses
elnmerodeargumentosquesehancolocadoenlapila.Todoslosargumentosyelvalordelafuncinse
eliminan de la pila cuando la funcin es invocada. Los resultados de la funcin se colocan en la parte
superiordelapilacuandoretornalafuncin.Elnmeroderesultadosseajustaanresults,anoserque
nresults sea LUA_MULTRET. En este caso se colocan todos los resultados de la funcin. Lua tiene
cuidado de que los valores retornados se ajusten en el espacio de pila. Los resultados de la funcin son
colocadosenlapilaenordendirecto(elprimeroescolocadoantes),porloquedespusdelallamadael
ltimoresultadoapareceenlapartesuperiordelapila.
Cualquiererrordentrodelafuncinllamadasepropagahaciaatrs(conunlongjmp).
El siguiente ejemplo muestra cmo puede el programa anfitrin hacer algo equivalente a este cdigo en
Lua:
a = f("how", t.x, 14)
AquestenC:
lua_getfield(L, LUA_GLOBALSINDEX, "f");
/* funcin que es llamada */
lua_pushstring(L, "how");
/* primer argumento */
lua_getfield(L, LUA_GLOBALSINDEX, "t");
/* tabla que es indexada */
lua_getfield(L, -1, "x");
/* coloca en la pila t.x (2 argumento) */
lua_remove(L, -2);
/* elimina 't' de la pila */
lua_pushinteger(L, 14);
/* 3 argumento */
lua_call(L, 3, 1);
/* llama a la funcin con 3 argumentos y 1 resultado */
lua_setfield(L, LUA_GLOBALSINDEX, "a"); /* modifica la variable global 'a' */
Tngase presente que el cdigo de arriba est "equilibrado" al final, pues la pila ha vuelto a su
configuracininicial.Estoestconsideradocomounabuenaprcticadeprogramacin.

lua_CFunction
typedef int (*lua_CFunction) (lua_State *L);
TipoparalasfuncionesC.
ConobjetodecomunicaradecuadamenteconLua,unafuncinCdebeusarelsiguienteprotocolo,elcual
define la manera en que son pasados los argumentos y los resultados: una funcin C recibe sus
argumentos desde Lua en su pila en orden directo (el primer argumento se coloca primero). Por tanto,
cuando comienza una funcin, lua_gettop(L) devuelve el nmero de argumentos recibidos por la
funcin. Su primer argumento (si existe) est en el ndice 1 y su ltimo argumento est en el ndice
lua_gettop(L).PararetornarvaloresaLuaunafuncinCsloloscolocaenlapila,enordendirecto(el
primerresultadovaprimero),yretornaelnmeroderesultados.Cualquierotrovalorenlapilapordebajo
de los resultados debe ser adecuadamente descartado por Lua. Como una funcin Lua, una funcin C
llamadadesdeLuapuederetornarvariosresultados.
Comoejemplo,lasiguientefuncinrecibeunnmerovariabledeargumentosnumricosyretornasumedia
ysusuma:
static int foo (lua_State *L) {
int n = lua_gettop(L); /* nmero de argumentos */
lua_Number sum = 0;
int i;
for (i = 1; i <= n; i++) {
if (!lua_isnumber(L, i)) {
lua_pushstring(L, "argumento incorrecto en la funcin 'media'");
lua_error(L);
}
sum += lua_tonumber(L, i);
}
lua_pushnumber(L, sum/n);
/* primer resultado */
https://www.lua.org/manual/5.1/es/manual.html#2.1

24/72

26/5/2016

Manual de Referencia de Lua 5.1

lua_pushnumber(L, sum);
/* segundo resultado */
return 2;
/* nmero de resultados */
}

lua_checkstack
int lua_checkstack (lua_State *L, int extra);

[0,+0,m]

Seaseguradequehayalmenosextraposicioneslibresenlapila.Devuelvefalsesinopuedehacer
crecerlapilahastaesetamao.Estafuncinnuncadisminuyelapilasilapilaesyamsgrandequeel
nuevotamaoladejasinmodificar.

lua_close
void lua_close (lua_State *L);

[0,+0,]

Destruye todos los objetos en el estado dado de Lua (llamando al correspondiente metamtodo de
liberacin de memoria, si existe) y libera toda la memoria dinmica usada por este estado. En algunas
plataformaspuedenosernecesariollamaraestafuncin,debidoaquetodoslosrecursosseliberande
manera natural cuando finaliza el programa anfitrin. Por otro lado, programas de ejecucin larga, como
puedesereldemoniodeunservidorweb,puedennecesitarlaliberacindeestadostanprontocomostos
nosenecesitenparaevitaruncrecimientodesmesurado.

lua_concat
void lua_concat (lua_State *L, int n);

[n,+1,e]

Concatenalosnvaloresdelapartesuperiordelapila,loseliminaydejaelresultadoenlapartesuperiorde
lapila.Sines1elresultadoeselvalorsimpleenlapila(estoes,lafuncinnohacenada)sines0el
resultado es un string vaco. La concatenacin se realiza siguiendo la semntica normal de Lua (vase
2.5.4).

lua_cpcall
int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);

[0,+(0|1),]

InvocalafuncinCfuncenmodoprotegido.funccomienzaconunsoloelementoensupila,unuserdata
ligero conteniendo ud. En caso de errores lua_cpcall devuelve el mismo cdigo de error que
lua_pcall, adems del objeto error en la parte superior de la pila en caso contrario retorna cero y no
cambialapila.Todoslosvaloresretornadosporfuncsedescartan.

lua_createtable
void lua_createtable (lua_State *L, int narr, int nrec);

[0,+1,m]

Crea una nueva tabla vaca y la coloca en la pila. La nueva tabla tiene espacio reservado para narr
elementosarrayynrecelementosnoarray.Estareservaestilcuandonosesabecuntoselementosva
acontenerlatabla.Enotrocasosepuedeusarlafuncinlua_newtable.

lua_dump
int lua_dump (lua_State *L, lua_Writer writer, void *data);

[0,+0,m]

Vuelcaunafuncinenformadechunkbinario.RecibeunafuncindeLuaenlapartesuperiordelapilay
produce un chunk binario que si se carga de nuevo resulta en una funcin equivalente a la volcada
previamente. Segn va produciendo partes del chunk, lua_dump invoca a la funcin writer (vase
lua_Writer)conlosdatosdataparaescribirlos.
ElvalorretornadoeselcdigodeerrordevueltoporlaltimallamadaaWriter0significanoerror.
EstafuncinnoeliminadelapilalafuncindeLua.

lua_equal
https://www.lua.org/manual/5.1/es/manual.html#2.1

25/72

26/5/2016

Manual de Referencia de Lua 5.1

int lua_equal (lua_State *L, int index1, int index2);

[0,+0,e]

Retorna 1 si los dos valores en los ndices aceptables index1 e index2 son iguales, siguiendo la
semnticadeloperador==deLua(estoes,puedeinvocarmetamtodos).Enotrocasoretorna0.Tambin
devuelve0sialgunodelosndicesnoesvlido.

lua_error
int lua_error (lua_State *L);

[1,+0,v]

GeneraunerrordeLua.Elmensajedeerror(quepuedeserrealmenteunvalordeLuadecualquiertipo)
debedeestarenlapartesuperiordelapila.Estafuncinrealizaunsaltolargo,yportantonuncaretorna.
(vaseluaL_error).

lua_gc
int lua_gc (lua_State *L, int what, int data);

[0,+0,e]

Controlaelliberadordememoria.
Estafuncinrealizavariastareas,deacuerdoconelvalordelargumentowhat:
LUA_GCSTOPdetieneelliberadordememoria.
LUA_GCRESTARTreiniciaelliberadordememoria.
LUA_GCCOLLECTrealizaunciclocompletodeliberacindememoria.
LUA_GCCOUNTretornalacantidadactualdememoria(enKbytes)enusoporLua.
LUA_GCCOUNTBretornaelrestodedividirpor1024lacantidadactualdememoriaenbytesenuso
porLua.
LUA_GCSTEP realiza un paso incremental de liberacin de memoria. El "tamao" del paso est
controlado por data (un valor mayor significa ms pasos) de una manera no especificada. Si se
desea controlar el tamao del paso se debe afinar experimentalmente el valor de data. La funcin
retorna1sielpasoacabconunciclodeliberacindememoria.
LUA_GCSETPAUSEestablecedata/100comoelnuevovalordelapausadelliberadordememoria
(vase2.10).Lafuncinretornaelvalorpreviodelapausa.
LUA_GCSETSTEPMUL establece data/100 como el nuevo valor del multiplicador del paso del
liberadordememoria(vase2.10).Lafuncinretornaelvalorpreviodelmultiplicador.

lua_getallocf
lua_Alloc lua_getallocf (lua_State *L, void **ud);

[0,+0,]

Retornalafuncinmanejadoradememoriadeunestadodado.Siud no es NULL Lua guarda en *udel


punteroopacopasadoalua_newstate.

lua_getfenv
void lua_getfenv (lua_State *L, int index);

[0,+1,]

Colocaenlapilalatabladeentornodeunvalorenelndicedado.

lua_getfield
void lua_getfield (lua_State *L, int index, const char *k);

[0,+1,e]

Colocaenlapilaelvalort[k],dondeteselvalordadoporelndicevlido.ComoenLuaestafuncin
puedeactivarunmetamtodoparaelevento"index"(vase2.8).

lua_getglobal
void lua_getglobal (lua_State *L, const char *name);

[0,+1,e]

Colocaenlapilaelvalordelnombreglobal.Estdefinidacomomacro:

https://www.lua.org/manual/5.1/es/manual.html#2.1

26/72

26/5/2016

Manual de Referencia de Lua 5.1

#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, s)

lua_getmetatable
int lua_getmetatable (lua_State *L, int index);

[0,+(0|1),]

Colocaenlapilalametatabladelvalorsituadoenelndiceaceptabledado.Sielndicenoesvlidoosiel
valornotienemetatabla,lafuncinretorna0ynocolocanadaenlapila.

lua_gettable
void lua_gettable (lua_State *L, int index);

[1,+1,e]

Colocaenlapilaelvalort[k],dondeteselvalorenelndicevlidoykeselvalorsituadoenlaparte
superiordelapila.
Esta funcin quita la clave de la parte superior de la pila (colocando a su vez el valor resultante en su
lugar).ComoenLuaestafuncinpuedeactivarunmetamtodoparaelevento"index"(vase2.8).

lua_gettop
int lua_gettop (lua_State *L);

[0,+0,]

Retornaelndicedelelementosituadoenlapartesuperiordelapila.Debidoaquelosndicescomienzan
en1esteresultadoesigualalnmerodeelementosenlapila(yas,0significaunapilavaca).

lua_insert
void lua_insert (lua_State *L, int index);

[1,+1,]

Mueve el elemento situado en la parte superior de la pila hacia el ndice vlido dado, desplazando hacia
arriba los elementos por encima de este ndice para abrir hueco. No puede ser invocada con un
pseudondicedebidoaquestenoesunaposicinrealenlapila.

lua_Integer
typedef ptrdiff_t lua_Integer;
EltipousadoporlaAPIdeLuapararepresentarvaloresenteros.
Por defecto es ptrdiff_t, que es normalmente el tipo entero con signo ms grande que la mquina
maneja"confortablemente".

lua_isboolean
int lua_isboolean (lua_State *L, int index);

[0,+0,]

Retorna1sielvalorenlasituacindelndiceaceptabletienetipobooleanoy0encasocontrario.

lua_iscfunction
int lua_iscfunction (lua_State *L, int index);

[0,+0,]

Retorna1sielvalorenlasituacindelndiceaceptableesunafuncinCy0encasocontrario.

lua_isfunction
int lua_isfunction (lua_State *L, int index);

[0,+0,]

Retorna 1 si el valor en la situacin del ndice aceptable es una funcin (en C o en Lua) y 0 en caso
contrario.

lua_islightuserdata
https://www.lua.org/manual/5.1/es/manual.html#2.1

27/72

26/5/2016

Manual de Referencia de Lua 5.1

int lua_islightuserdata (lua_State *L, int index);

[0,+0,]

Retorna1sielvalorenlasituacindelndiceaceptableesunuserdataligeroy0encasocontrario.

lua_isnil
int lua_isnil (lua_State *L, int index);

[0,+0,]

Retorna1sielvalorenlasituacindelndiceaceptableesnily0encasocontrario.

lua_isnone
int lua_isnone (lua_State *L, int index);

[0,+0,]

Retorna1sielvalorenlasituacindelndiceaceptableesnovlido(estoes,siserefiereaunelemento
fueradelapilaactual)y0encasocontrario.

lua_isnoneornil
int lua_isnoneornil (lua_State *L, int index);

[0,+0,]

Retorna1sielvalorenlasituacindelndiceaceptableesnovlido(estoes,siserefiereaunelemento
fueradelapilaactual)osielvalorenestendiceesnil,y0encasocontrario.

lua_isnumber
int lua_isnumber (lua_State *L, int index);

[0,+0,]

Retorna1sielvalorenlasituacindelndiceaceptableesunnmeroounstringconvertibleanmeroy0
encasocontrario.

lua_isstring
int lua_isstring (lua_State *L, int index);

[0,+0,]

Retorna 1 si el valor en la situacin del ndice aceptable es un string o un nmero (que es siempre
convertibleaunstring)y0encasocontrario.

lua_istable
int lua_istable (lua_State *L, int index);

[0,+0,]

Retorna1sielvalorenlasituacindelndiceaceptableesunatablay0encasocontrario.

lua_isthread
int lua_isthread (lua_State *L, int index);

[0,+0,]

Retorna1sielvalorenlasituacindelndiceaceptableesunprocesoy0encasocontrario.

lua_isuserdata
int lua_isuserdata (lua_State *L, int index);

[0,+0,]

Retorna 1 si el valor en la situacin del ndice aceptable es un userdata (ligero o completo) y 0 en caso
contrario.

lua_lessthan
int lua_lessthan (lua_State *L, int index1, int index2);

[0,+0,e]

Retorna 1 si el valor situado en la posicin del ndice aceptable index1 es menor que el situado en la
posicin del ndice aceptable index2, siguiendo la semntica del operador < de Lua (esto es, puede
https://www.lua.org/manual/5.1/es/manual.html#2.1

28/72

26/5/2016

Manual de Referencia de Lua 5.1

invocarmetamtodos).Encasocontrarioretorna0.Tambinretorna0sialgunodelosndicesesinvlido.

lua_load
int lua_load (lua_State *L,
lua_Reader reader,
void *data,
const char *chunkname);

[0,+1,]

CargaunchunkdeLua.Sinohayerrores,lua_loadcolocaelchunkcompiladoenlapartesuperiordela
pila.Encasocontrariocolocaahunmensajedeerror.Losvaloresderetornodelua_loadson:
0sinerrores.
LUA_ERRSYNTAXerrordesintaxisdurantelaprecompilacin.
LUA_ERRMEMerrordereservadememoria.
lua_loaddetectaautomticametnesielchunkestenbinariooenformadetexto,ylocargadeacuerdo
conesto(vaseelprogramaluac).
lua_load usa una funcin lectora suplida por el usuario para leer el chunk (vase lua_Reader). El
argumentodataesunvaloropacopasadoalafuncinlectora.
El argumento chunkname da un nombre al chunk. el cual es usado en los mensajes de error y en la
informacindedepuracin(vase3.8).

lua_newstate
lua_State *lua_newstate (lua_Alloc f, void *ud);

[0,+0,]

Crea un nuevo estado independiente. Retorna NULL si no puede crear el estado (debido a falta de
memoria).ElargumentofeslafuncindereservadememoriaLuahacetodalareservadememoriapara
este estado a travs de esta funcin. El segundo argumento, ud, es un puntero opaco que Lua
simplementepasaalreservadordememoriaencadallamada.

lua_newtable
void lua_newtable (lua_State *L);

[0,+1,m]

Creaunanuevatablavacaylacolocaenlapila.Equivalealua_createtable(L, 0, 0).

lua_newthread
lua_State *lua_newthread (lua_State *L);

[0,+1,m]

Crea un nuevo proceso, lo coloca en la pila y retorna un puntero a un lua_State que representa este
nuevo proceso. El nuevo estado retornado por esta funcin comparte con el original todos los objetos
globales(comolastablas),perotieneunapiladeejecucinindependiente.
Noexisteunafuncinexplcitaparacerrarodestruirunproceso.Losprocesosestnsujetosaliberacinde
memoria,comocualquierotroobjetodeLua.

lua_newuserdata
void *lua_newuserdata (lua_State *L, size_t size);

[0,+1,m]

Estafuncinreservaunnuevobloquedememoriaconeltamaodado,colocaenlapilaunnuevouserdata
completoconladireccindelbloquedememoriayretornaestadireccin.
LosuserdatarepresentanvaloresdeCenLua.Unuserdatacompletorepresenta unbloque dememoria.
Es un objeto (como una tabla): se puede crear, puede tener su propia metatabla y se puede detectar
cundoestsiendoeliminadodememoria.Unuserdatacompletoessloigualasmismo(enuntestde
igualdaddirecta).
CuandoLualiberaunuserdatacompletoconunmetamtodogc,llamaalmetamtodoymarcaeluserdata
https://www.lua.org/manual/5.1/es/manual.html#2.1

29/72

26/5/2016

Manual de Referencia de Lua 5.1

comofinalizado.CuandoesteuserdataesliberadodenuevoentoncesescuandoLualiberadefinitivamente
lamemoriacorrespondiente.

lua_next
int lua_next (lua_State *L, int index);

[1,+(2|0),e]

Eliminaunaclavedelapilaycolocaunparclavevalordeunatablaenelndicedado(la"siguiente"pareja
despusdelaclavedada).Sinohaymselementosenlatablaentonceslua_nextretorna0(ynocoloca
nadaenlapila).
Unatpicaiteracinderecorridodetablasera:
/* la tabla est en la pila en el ndice 't' */
lua_pushnil(L); /* primera clave */
while (lua_next(L, t) != 0) {
/* 'clave' est en el ndice -2 y 'valor' en el ndice -1 */
printf("%s - %s\n",
lua_typename(L, lua_type(L, -2)),
lua_typename(L, lua_type(L, -1)));
/* elimina 'valor'; mantiene 'clave' para la siguiente iteracin */
lua_pop(L, 1);
}
Mientrasserecorreunatablanodebellamarsealua_tolstringdirectamenteenunaclaveanoserque
se conozca que la clave es realmente un string. Recuerde que lua_tolstring cambia el valor en el
ndicedadoestoconfundealasiguientellamadaalua_next.

lua_Number
typedef double lua_Number;
EltipodelosnmerosenLua.Pordefectoesundouble,peropuedesercambiadoenluaconf.h.
AtravsdelficherodeconfiguracinsepuedecambiarLuaparaqueopereconotrotipodenmeros(por
ejemplo,floatolong).

lua_objlen
size_t lua_objlen (lua_State *L, int index);

[0,+0,]

Retorna la "longitud" de un valor situado en el ndice aceptable: para un string,es lalongitud delmismo
para una tabla, es el resultado del operador longitud ('#') para un userdata, es el tamao del bloque de
memoriareservadoparaelmismoparaotrosvaloreses0.

lua_pcall
[(nargs+1),+(nresults|1),]
int lua_pcall (lua_State *L, int nargs, int nresults, int errfu
nc);

Invocaunafuncinenmodoprotegido.
Tantonargscomonresultstienenelmismosignificadoqueenlua_call.Sinohayerroresdurantela
llamada, lua_pcall se comporta exactamente igual que lua_call. Sin embargo en caso de error
lua_pcall lo captura, colocando un nico valor en la pila (el mensaje de error) y retorna un cdigo de
error.Comolua_call,lua_pcallsiempreeliminalafuncinysusargumentosdelapila.
Sierrfunces0entonceselmensajedeerrorretornadoenlapilaesexactamenteelmensajeoriginal.En
otro caso, errfunc es el ndice en la pila de una funcin manejadora de error. (En la implementacin
actual, este ndice no puede ser un pseudondice.) En caso de errores de ejecucin esta funcin ser
llamadaconelmensajedeerroryelvalordevueltoserelmensajeretornadoenlapilaporlua_pcall.
Tpicamentelafuncinmanejadoradeerrorseusaparaaadirmsinformacindedepuracinalmensaje
deerror,talcomoun"trazadoinverso"delapila.Esainformacinnopuedeserrecolectadadespusdel
retornodelua_pcall,puestoqueporentonceslapilayanotieneesainformacin.
https://www.lua.org/manual/5.1/es/manual.html#2.1

30/72

26/5/2016

Manual de Referencia de Lua 5.1

Lafuncinlua_pcallretorna0encasodexitoounodelossiguientescdigosdeerror(definidosen
lua.h):
LUA_ERRRUNunerrordeejecucin.
LUA_ERRMEM un error de reserva de memoria. Para este error Lua no llama a la funcin
manejadoradeerror.
LUA_ERRERRerrormientrasseestejecutandolafuncinmanejadoradeerror.

lua_pop
void lua_pop (lua_State *L, int n);

[n,+0,]

Eliminanelementosdelapila.

lua_pushboolean
void lua_pushboolean (lua_State *L, int b);

[0,+1,]

Colocaelvalorbooleanobenlapila.

lua_pushcclosure
void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);

[n,+1,m]

ColocaenlapilaunanuevainstanciaenC.
CuandosecreaunafuncinCesposibleasociarlealgunosvalores,creandoentoncesunainstanciaenC
(vase 3.4) estos valores son entonces accesibles a la funcin en cualquier momento en que sea
invocada.ParaasociarvaloresaunafuncinC,primerostosdeberancolocarseenlapila(cuandohay
varios, el primero se coloca antes). Entonces se invoca lua_pushcclosure para crear y colocar la
funcin C en la pila, con el argumento n indicando cuantos valores estn asociados con la misma.
lua_pushcclosuretambineliminaesosvaloresdelapila.

lua_pushcfunction
void lua_pushcfunction (lua_State *L, lua_CFunction f);

[0,+1,m]

ColocaunafuncinCenlapila.EstafuncinrecibeunpunteroaunafuncinCycolocaenlapilaunvalor
deLuadetipofunctionque,cuandosellama,invocalacorrespondientefuncinC.
CualquierfuncinquesearegistradaenLuadebeseguirelprotocolocorrectopararecibirsusargumentos
ydevolversusresultados(vaselua_CFunction).
lua_pushcfunction(L, f)estdefinidacomounamacro:
#define lua_pushcfunction(L, f) lua_pushcclosure(L, f, 0)

lua_pushfstring
const char *lua_pushfstring (lua_State *L, const char *fmt, ...);

[0,+1,m]

Colocaenlapilaunstringformateadoyretornaunpunteroaestestring.Essimilaralafuncinsprintf
deC,perotieneconellaalgunasimportantesdiferencias:
No tiene que reservar memoria para el resultado, puesto que ste es un string de Lua, y Lua se
encargaderealizarlareservadememoria(ytambinlaliberacin).
Los especificadores de conversin son bastante restrictivos. No hay indicadores, anchuras o
precisiones.Losespecificadoresdeconversinpuedenserslo:'%%'(insertaun'%'enelstring),'%s'
(insertaunstringterminadoencerosinrestriccionesdetamao),'%f'(insertaunlua_Number), '%p'
(inserta un puntero como nmero hexadecimal), '%d' (inserta un int), y '%c' (inserta un int como
carcter).

lua_pushinteger
https://www.lua.org/manual/5.1/es/manual.html#2.1

31/72

26/5/2016

Manual de Referencia de Lua 5.1

void lua_pushinteger (lua_State *L, lua_Integer n);

[0,+1,]

Colocaunnmeroenterodevalornenlapila.

lua_pushlightuserdata
void lua_pushlightuserdata (lua_State *L, void *p);

[0,+1,]

Colocaunuserdataligeroenlapila.
Los userdata representan valores de C en Lua. Un userdata ligero representa un puntero. Es un valor
(comounnmero):nosecreanitienemetatablasynosufreliberacindememoria(puestoquenuncafue
reservada).Enunacomparacindeigualdad,unuserdataligeroesigualquecualquierotrouserdataligero
conlamismadireccinenC.

lua_pushliteral
void lua_pushliteral (lua_State *L, const char *s);

[0,+1,m]

Estamacroesequivalentealua_pushlstring,peropuedeserusadasolamentecuandosesunstring
literal.Enesoscasos,proporcionaautomticamentelalongituddelstring.

lua_pushlstring
void lua_pushlstring (lua_State *L, const char *s, size_t len);

[0,+1,m]

Colocaelstringapuntadoporscontamaolen en la pila. Lua realiza (o reutiliza) una copia interna del


string dado, as que la memoria en s puede ser liberada o reutilizada inmediamente despus de que la
funcinretorne.Elstringpuedecontenerceros.

lua_pushnil
void lua_pushnil (lua_State *L);

[0,+1,]

Colocaunvalornilenlapila.

lua_pushnumber
void lua_pushnumber (lua_State *L, lua_Number n);

[0,+1,]

Colocaunnmeroconvalornenlapila.

lua_pushstring
void lua_pushstring (lua_State *L, const char *s);

[0,+1,m]

Colocaelstringterminadoenceroalqueapuntasenlapila.Luarealiza(oreutiliza)unacopiainternadel
string dado, as que la memoria en s puede ser liberada o reutilizada inmediamente despus de que la
funcinretorne.Elstringnopuedecontenercaracteresceroseasumequeelfinaldelmismoeselprimer
carcterceroqueaparezca.

lua_pushthread
int lua_pushthread (lua_State *L);

[0,+1,]

ColocaunprocesorepresentadoporLenlapila.Retorna1siesteprocesoeselprocesoprincipaldesu
estado.

lua_pushvalue
void lua_pushvalue (lua_State *L, int index);

[0,+1,]

Colocaunacopiadelelementosituadoenelndicevlidodadoenlapila.
https://www.lua.org/manual/5.1/es/manual.html#2.1

32/72

26/5/2016

Manual de Referencia de Lua 5.1

lua_pushvfstring
const char *lua_pushvfstring (lua_State *L,
const char *fmt,
va_list argp);

[0,+1,m]

Equivalente a lua_pushfstring, excepto que recibe un argumento de tipo va_list en lugar de un


nmerovariabledeargumentos.

lua_rawequal
int lua_rawequal (lua_State *L, int index1, int index2);

[0,+0,]

Retorna1silosdosvaloressituadosenlosndicesaceptablesindex1eindex2sonigualesdemanera
primitiva(estoes,sininvocarmetamtodos).Encasocontrarioretorna0.Tambinretorna0sialgunode
losndicesnoesvlido.

lua_rawget
void lua_rawget (lua_State *L, int index);

[1,+1,]

Similaralua_gettable,perorealizaunaccesodirecto(sinmetamtodos).

lua_rawgeti
void lua_rawgeti (lua_State *L, int index, int n);

[0,+1,]

Colocaenlapilaelvalort[n],dondeteselvalorenelndicevlido.Elaccesoesdirecto,estoes,sin
invocarmetamtodos.

lua_rawset
void lua_rawset (lua_State *L, int index);

[2,+0,m]

Similaralua_settable,perorealizandounaasignacindirecta(sininvocarmetamtodos).

lua_rawseti
void lua_rawseti (lua_State *L, int index, int n);

[1,+0,m]

Realiza el equivalente a t[n] = v, donde t es el valor en el ndice vlido y v es el valor en la parte


superiordelapila.
Esta funcin elimina el valor de la parte superior de la pila. La asignacin es directa, sin invocar
metamtodos.

lua_Reader
typedef const char * (*lua_Reader) (lua_State *L,
void *data,
size_t *size);
La funcin de lectura usada por lua_load. Cada vez que necesita otro fragmento de chunk, lua_load
llamaal"lector",pasndolesuargumentodata.Ellectordeberetornarunpunteroaunbloquedememoria
con un nuevo fragmento de chunk y establece size como el tamao del bloque. El bloque debe existir
hasta que la funcin lectora se invoque de nuevo. Para sealar el final del chunk el lector debe retornar
NULL.Lafuncinlectorapuederetornarfragmentosdecualquiertamaomayorquecero.

lua_register
void lua_register (lua_State *L,
const char *name,
lua_CFunction f);
https://www.lua.org/manual/5.1/es/manual.html#2.1

[0,+0,e]

33/72

26/5/2016

Manual de Referencia de Lua 5.1

EstablecelafuncinCfcomoelnuevovalordelnombreglobal.Estdefinidaenlamacro:
#define lua_register(L,n,f) \
(lua_pushcfunction(L, f), lua_setglobal(L, n))

lua_remove
void lua_remove (lua_State *L, int index);

[1,+0,]

Elimina el elemento en la posicin del ndice vlido dado, desplazando hacia abajo los elementos que
estabanporencimadeestendiceparallenarelhueco.Nopuedeserllamadaconunpseudondice,debido
aquestenoesunaposicinrealenlapila.

lua_replace
void lua_replace (lua_State *L, int index);

[1,+0,]

Mueve el elemento que est en la parte superior de la pila a la posicin dada (y lo elimina de la parte
superior de la pila), sin desplazar ningn elemento de la misma (por tanto reemplazando el valor en la
posicindada).

lua_resume
int lua_resume (lua_State *L, int narg);

[?,+?,]

Comienzayresumeunacorutinaenunprocesodado.
Para comenzar una corutina se debe crear un nuevo proceso (vase lua_newthread) entonces se
coloca en su propia pila la funcin principal ms cualquier posible argumento posteriormente se invoca
lua_resume, con narg siendo el nmero de argumentos. Esta llamada retorna cuando la corutina
suspendeofinalizasuejecucin.Cuandoretorna,lapilacontienetodoslosvalorespasadosalua_yield,
otodoslosvaloresretornadosporelcuerpodelafuncin.lua_resumeretornaLUA_YIELDsilacorutina
cedielcontrol,0silacorutinaacabsuejecucinsinerrores,ouncdigodeerrorencasodeerrores
(vase lua_pcall). En caso de error, se deja informacin en la pila, as que se puede usar laAPI de
depuracinconella.Elmensajedeerrorestenlapartesuperiordelapila.Parareiniciarunacorutinase
ponen en la pila slo los valores que son pasados como resultado de yield, y entonces se invoca
lua_resume.

lua_setallocf
void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);

[0,+0,]

Utilizafconeluserdataudcomofuncindereservadememoriadeunestadodado.

lua_setfenv
int lua_setfenv (lua_State *L, int index);

[1,+0,]

Eliminaunatabladelapartesuperiordelapilaylatomacomonuevoentornoparaelvalorsituadoenla
posicin del ndice. Si el valor dado no es ni una funcin ni un proceso ni un userdata entonces
lua_setfenvretorna0.Encasocontrarioretorna1.

lua_setfield
void lua_setfield (lua_State *L, int index, const char *k);

[1,+0,e]

Realizaelequivalenteat[k] = v,dondeteselvalorenlaposicindelndicevlidoyveselvalorenla
partesuperiordelapila.
Esta funcin elimina el valor de la pila. Como en Lua, esta funcin puede activar un metamtodo para el
evento"newindex"(vase2.8).

lua_setglobal
https://www.lua.org/manual/5.1/es/manual.html#2.1

34/72

26/5/2016

Manual de Referencia de Lua 5.1

void lua_setglobal (lua_State *L, const char *name);

[1,+0,e]

Eliminaunvalordelapilaylotomacomonuevovalordelnombreglobal.Estdefinidaenunamacro:
#define lua_setglobal(L,s)

lua_setfield(L, LUA_GLOBALSINDEX, s)

lua_setmetatable
int lua_setmetatable (lua_State *L, int index);

[1,+0,]

Elimina una tabla de la pila y la toma como nueva metatabla para el valor en la situacin del ndice
aceptable.

lua_settable
void lua_settable (lua_State *L, int index);

[2,+0,e]

Haceelequivalenteat[k] = v,dondeteselvalorenlaposicindelndicevlido,veselvalorenla
partesuperiordelapilaykeselvalorjustamentedebajo.
Esta funcin elimina de la pila tanto la clave como el valor. Como en Lua, esta funcin puede activar un
metamtodoparaelevento"newindex"(vase2.8).

lua_settop
void lua_settop (lua_State *L, int index);

[?,+?,]

Aceptacualquierndiceaceptable0yestablecelapartesuperiordelapilaenestendice.Siesevalores
mayorqueelantiguoentonceslosnuevoselementosserellenanconnil.Siindexes0entoncestodoslos
elementosdelapilaseeliminan.

lua_State
typedef struct lua_State lua_State;
EstructuraopacaquealmacenatodoelestadodeunintrpretedeLua.LabibliotecadeLuaestotalmente
reentrante: no tiene variables globales. Toda la informacin acerca de un estado se guarda en esta
estructura.
Un puntero a este estado debe ser pasado como primer argumento a cualquier funcin de la biblioteca,
exceptoalua_newstate,lacualcreaunnuevoestadodeLuadesdecero.

lua_status
int lua_status (lua_State *L);

[0,+0,]

RetornaelestatusdelprocesoL.
Elestatuspuedeser0paraunprocesonormal,uncdigodeerrorsielprocesofinalizasuejecucinconun
error,oLUA_YIELDsielprocesoestsuspendido.

lua_toboolean
int lua_toboolean (lua_State *L, int index);

[0,+0,]

ConvierteelvalordeLuasituadoenlaposicindelndiceaceptableenunbooleanodeC(01).Como
todoslostestenLua,lua_tobooleanretorna1paracadavalordeLuadiferentedefalseynilencaso
contrarioretorna0.Tambinretorna0cuandoseinvocasinunndicevlido.(Sisedeseaaceptarslolos
valoresbooleanosreales,seselua_isbooleanparaverificareltipodelvalor.)

lua_tocfunction
lua_CFunction lua_tocfunction (lua_State *L, int index);
https://www.lua.org/manual/5.1/es/manual.html#2.1

[0,+0,]

35/72

26/5/2016

Manual de Referencia de Lua 5.1

ConvierteenunafuncinCelvalorsituadoenelndiceaceptable.EstevalordebeserunafuncinCen
casocontrarioretornaNULL.

lua_tointeger
lua_Integer lua_tointeger (lua_State *L, int index);

[0,+0,]

ConvierteelvalordeLuasituadoenelndiceaceptableenunenterosinsignodeltipolua_Integer.El
valor de Lua debe ser un nmero o un string convertible a un nmero (vase 2.2.1) en otro caso
lua_tointegerretorna0.
Sielnmeronoesenterosetruncadeunamaneranoespecificada.

lua_tolstring
const char *lua_tolstring (lua_State *L, int index, size_t *len);

[0,+0,m]

ConvierteelvalordeLuasituadoenlaposicindelndiceaceptableenunstring(const char*).Silen
no es NULL, tambin establece *len como longitud del mismo. El valor Lua puede ser un string o un
nmero en caso contrario la funcin retorna NULL. Si el valor es un nmero entonces lua_tolstring
tambin cambia el valor actual en la pila a un string. (Este cambio confunde a lua_next cuando
lua_tolstringseaplicaaclavesduranteelrecorridodeunatabla.)
lua_tolstring retorna un puntero totalmente alineado a un string dentro de un estado de Lua. Este
stringsiempretieneuncero('\0')despusdesultimocarcter(comoenC),peropuedecontenerotros
cerosensucuerpo.DebidoaqueLuatieneliberacindememoria,noexistengarantasdequeelpuntero
retornadoporlua_tolstringsigasiendovlidodespusdequeelvalorcorrespondienteseaeliminado
delapila.

lua_tonumber
lua_Number lua_tonumber (lua_State *L, int index);

[0,+0,]

Convierte el valor Lua dado en la posicion del ndice aceptable en un nmero (vase lua_Number). El
valor Lua debe ser un nmero o un string convertible a nmero (vase 2.2.1) en caso contrario
lua_tonumberretorna0.

lua_topointer
const void *lua_topointer (lua_State *L, int index);

[0,+0,]

ConvierteelvalorsituadoenelndiceaceptableenunpunterogenricodeC(void*).Elvalorpuedeser
unuserdata,unatabla,unprocesoounafuncinencasocontrariolua_topointerretornaNULL.Luase
aseguradequediferentesobjetosretornendiferentespunteros.Nohayunamaneradirectadeconvertirun
punterodenuevoasuvalororiginal.
Tpicamenteestafuncinsloesusadaparainformacindedepuracin.

lua_tostring
const char *lua_tostring (lua_State *L, int index);

[0,+0,m]

Equivalentealua_tolstringconlenigualaNULL.

lua_tothread
lua_State *lua_tothread (lua_State *L, int index);

[0,+0,]

Convierte el valor en la posicin del ndice aceptable en un proceso de Lua (representado como
lua_State*).EstevalordebeserunprocesoencasocontrariolafuncinretornaNULL.

lua_touserdata
https://www.lua.org/manual/5.1/es/manual.html#2.1

36/72

26/5/2016

Manual de Referencia de Lua 5.1

void *lua_touserdata (lua_State *L, int index);

[0,+0,]

Sielvalorenlaposicindelndiceaceptableesunuserdatacompletoretornaladireccindesubloquede
memoria.Sielvaloresunuserdataligeroretornasupuntero.EnotrocasoretornaNULL.

lua_type
int lua_type (lua_State *L, int index);

[0,+0,]

RetornaeltipodelvalorsituadoenelndiceaceptableoLUA_TNONEsiladireccinesinvlida(estoes,un
ndice a una posicin "vaca" en la pila). Los tipos retornados por lua_type estn codificados por las
siguientes constantes, definidas en lua.h: LUA_TNIL, LUA_TNUMBER, LUA_TBOOLEAN, LUA_TSTRING,
LUA_TTABLE,LUA_TFUNCTION,LUA_TUSERDATA,LUA_TTHREADyLUA_TLIGHTUSERDATA.

lua_typename
const char *lua_typename (lua_State *L, int tp);

[0,+0,]

Retorna el nombre del tipo codificado por el valor tp, el cual debe ser uno de los valores retornados
lua_type.

lua_Writer
typedef int (*lua_Writer) (lua_State *L,
const void* p,
size_t sz,
void* ud);
La funcin escritora usada por lua_dump. Cada vez que produce otro fragmento de chunk, lua_dump
llama al escritor, pasndole el buffer para ser escrito (p), su tamao (sz) y el argumento data
proporcionadoalua_dump.
Elescritorretornauncdigodeerror:0significanoerroresycualquierotrovalorsignificaunerroryevita
quelua_dumpllamedenuevoalescritor.

lua_xmove
void lua_xmove (lua_State *from, lua_State *to, int n);

[?,+?,]

Intercambiavaloresentrediferentesprocesosdelmismoestadoglobal.
Estafuncineliminanvaloresdelapilaindicadaporfromyloscolocaenlapilaindicadaporto.

lua_yield
int lua_yield (lua_State *L, int nresults);

[?,+?,]

Producelacesindeunacorutina.
EstafuncindeberaserllamadasolamentecomoexpresinderetornodeunafuncinC,comosigue:
return lua_yield (L, nresults);
CuandounafuncinCllamaalua_yielddeestamanera,lacorutinaqueestejecutndosesuspende
suejecucin,ylallamadaalua_resumequecomenzestacorutinaretorna.Elargumentonresultses
elnmerodevaloresdelapilaquesonpasadoscomoresultadosalua_resume.

3.8Elinterfacededepuracin
Lua no tiene utilidades de depuracin internas. En su lugar ofrece una interface especial por medio de
funcionesyhooks.Estainterfacepermitelaconstruccindediferentestiposdedepuradores,analizadores
decdigoyotrasherramientasquenecesitan"informacininterna"delintrprete.

https://www.lua.org/manual/5.1/es/manual.html#2.1

37/72

26/5/2016

Manual de Referencia de Lua 5.1

lua_Debug
typedef struct lua_Debug {
int event;
const char *name;
/* (n) */
const char *namewhat;
/* (n) */
const char *what;
/* (S) */
const char *source;
/* (S) */
int currentline;
/* (l) */
int nups;
/* (u) number of upvalues */
int linedefined;
/* (S) */
int lastlinedefined;
/* (S) */
char short_src[LUA_IDSIZE]; /* (S) */
/* private part */
other fields
} lua_Debug;
Una estructura usada para contener diferentes fragmentos de informacin acerca de la funcin activa.
lua_getstackrellenaslolaparteprivadadeestaestructura,parasuusoposterior.Pararellenarotros
camposdelua_debugconinformacintil,llmesealua_getinfo.
Loscamposdelua_debugtienenelsiguientesignificado:
source: Si la funcin fue definida en un string entonces source es ese string. Si la funcin fue
definidaenunficheroentoncessourcecomienzaconuncarcter'@'seguidodelnombredelfichero.
short_src:unaversin"imprimible"desource,queserusadaenlosmensajesdeerror.
linedefined:elnmerodelneadondecomienzaladefinicindelafuncin.
lastlinedefined:elnmerodelneadondeacabaladefinicindefuncin.
what:elstring"Lua"silafuncinesunafuncinLua,"C"silafuncinesunafuncinC,"main"si
eslaparteprincipaldeunchunk,y"tail"siesunafuncinquerealizaunallamadadecola.Esel
ltimocasoLuanotienemsinformacinacercadelafuncin.
currentline:lalneaactualdondelafuncindadaseestejecutando.Cuandoestainformacinno
estdisponible,currentlinetomaelvalor1.
name:unnombrerazonableparalafuncindada.DebidoaquelasfuncionesenLuasonvaloresde
primeraclase,notienenunnombrefijo:algunasfuncionespuedenserelvalordevariablesglobales,
mientras que otras pueden ser almacenadas slo en un campo de una tabla. La funcin
lua_getinfo analiza cmo fue invocada la funcin para encontrarle un nombre adecuado. Si no
puedeencontrarloentoncesnombresehaceNULL.
namewhat: explica el campo nombre. El valor de namewhat puede ser "global", "local",
"method","field","upvalue"o""(unstringvaco),deacuerdoacmofueinvocadalafuncin.
(Luausaunstringvacocuandootrasopcionesnosonidneas.)
nups:elnumerodeupvaluesdelafuncin.

lua_gethook
lua_Hook lua_gethook (lua_State *L);

[0,+0,]

Retornalafuncinhookactual.

lua_gethookcount
int lua_gethookcount (lua_State *L);

[0,+0,]

Retornaelcontadordehookactual.

lua_gethookmask
int lua_gethookmask (lua_State *L);

[0,+0,]

Retornalamscaradelhookactual.

lua_getinfo
https://www.lua.org/manual/5.1/es/manual.html#2.1

38/72

26/5/2016

Manual de Referencia de Lua 5.1

int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);

[(0|1),+(0|1|2),m]

Devuelveinformacinacercadeunafuncinespecficaodeunainvocacindefuncin.
Para obtener informacin acerca de una invocacin de funcin, el parmetro ar debe ser un registro de
activacinvlido,quehayasidollenadoconunallamadapreviaalua_getstackodadacomoargumento
aunhook(vaselua_Hook).
Paraobtenerinformacindeunafuncinsecolocalamismaenlapartesuperiordelapilaysecomienzael
stringwhatconelcarcter'>'.(Enesecaso,lua_getinfo elimina la funcin de la parte superior de la
pila.) Por ejemplo, para conocer en qu lnea fue definida una funcin f se puede utilizar el siguiente
cdigo:
lua_Debug ar;
lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* obtiene la 'f' global */
lua_getinfo(L, ">S", &ar);
printf("%d\n", ar.linedefined);
Cadacarcterenelstringwhatseleccionaloscamposdelaestructuraarquesernrellenadosounvalor
quesercolocadoenlapartesuperiordelapila:
'n':rellenaloscamposnameynamewhat
'S':rellenaloscampossource,short_src,linedefined,lastlinedefinedywhat
'l':rellenaelcampocurrentline
'u':rellenaelcamponups
'f':colocaenlapilalafuncinqueestejecutndosealniveldado
'L': coloca en la pila una tabla cuyos ndices son los nmeros de las lneas que son vlidas en la
funcin.(Unalneavlidaesunalneaconalgncdigoasociado,estoes,unalneadondesepuede
ponerunpuntoderotura.Laslneasnovlidasincluyenlneasvacasycomentarios.
Estafuncindevuelve0encasodeerror(porejemplo,unaopcininvlidaenwhat).

lua_getlocal
const char *lua_getlocal (lua_State *L, lua_Debug *ar, int n);

[0,+(0|1),]

Obtieneinformacinacercadeunavariablelocaldeunregistrodeactivacindado.Elargumentoardebe
serunregistrodeactivacinvlidoquefuerellenadoenunallamadapreviaalua_getstackodadocomo
argumento a un hook (vase lua_Hook). El ndice n selecciona qu variable local inspeccionar (1 es el
primer argumento o la primera variable local activa, y as sucesivamente, hasta la ltima variable local
activa).lua_getlocalcolocaelvalordelavariableenlapilayretornasunombre.
Los nombres de variable que comienzan con '(' (parntesis de abrir) representan variables internas
(variablesdecontroldebucle,variablestemporalesyvariableslocalesdefuncionesC).
RetornaNULL(ynocolocanadaenlapila)cuandoelndiceesmayorqueelnmerodevariableslocales
activas.

lua_getstack
int lua_getstack (lua_State *L, int level, lua_Debug *ar);

[0,+0,]

Obtieneinformacinacercadelapilaenejecucindelintrprete.
Estafuncinrellenapartesdeunaestructuralua_debugconunaidentificacindelregistrodeactivacin
delafuncinqueseestejecutandoalniveldado.Nivel0eslafuncinactualmenteenejecucin,mientras
que el nivel n+1 es la funcin que ha invocado a la del nivel n. Cuando no hay errores, lua_getstack
retorna1cuandosellamaconunnivelmayorqueeltamaodelapilaretorna0.

lua_getupvalue
const char *lua_getupvalue (lua_State *L, int funcindex, int n);

[0,+(0|1),]

Obtiene informacin acerca de un upavalue de una instancia. (Para las funciones Lua los upvalues son
https://www.lua.org/manual/5.1/es/manual.html#2.1

39/72

26/5/2016

Manual de Referencia de Lua 5.1

variableslocalesexternasalafuncinquelasusa,yque,porconsiguiente,estnincluidasensuinstancia.)
lua_getupvalue obtiene el ndice n de un upvalue, coloca su valor en la pila y retorna su nombre.
funcindexapuntahacialainstanciaenlapila.(Losupvaluesnosiguenunordenparticular,puestoque
estnactivosalolargodetodalafuncin.Portanto,estnnumeradossiguiendounordenarbitrario.)
RetornaNULL (y no coloca nada en la pila) cuando el ndice es mayor que el nmero de upvalues.Para
funcionesCestafuncinusaelstringvaco""comonombreparatodoslosupvalues.

lua_Hook
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
Tipoparafuncioneshookdedepuracin.
Cadavezqueseinvocaunhooksuargumentoartieneensucampoeventeleventoquehaactivadoel
hook. Lua identifica estos eventos con las siguientes constantes: LUA_HOOKCALL, LUA_HOOKRET,
LUA_HOOKTAILRET, LUA_HOOKLINE y LUA_HOOKCOUNT. Adems, para eventos de lnea, tambin se
estableceelcampocurrentline.Paraobtenerelvalordealgnotrocampoenar,elhookdebeinvocar
a lua_getinfo. Para eventos de retorno, event puede ser LUA_HOOKRET, el valor normal, o
LUA_HOOKTAILRET.Enelltimocaso,Luaestsimulandounretornodeunafuncinquehahechouna
llamadadecolaenestecaso,esintilllamaralua_getinfo.
MientrasLuaestejecutandounhook,deshabilitaotrasllamadasahooks.Portanto,siunhookllamade
nuevo a Lua para ejecutar una funcin o un chunk entonces esa ejecucin ocurre sin ninguna llamada a
hooks.

lua_sethook
int lua_sethook (lua_State *L, lua_Hook f, int mask, int count);

[0,+0,]

Establecelafuncinhookdedepuracin.
funceslafuncinhook.maskespecificaenqueventosdebeserllamadoelhook:seformamediantela
operacin "or" aplicada a los bits de las constantes LUA_MASKCALL, LUA_MASKRET, LUA_MASKLINE, y
LUA_MASKCOUNT. El argumento count slo tiene sentido cuando la mscara incluye LUA_MASKCOUNT.
Paracadaevento,elhookesinvocadocomoseexplicaacontinuacin:
Elhooktipo"call"esinvocadocuandoelintrpretellamaaunafuncin.Elhookesinvocadojusto
despusdequeLuaentreenlanuevafuncin,antesdequelafuncintomesusargumentos.
El hook de tipo "return" es invocado cuando el intrprete retorna desde una funcin. El hook es
invocadojustoantesdequeLuadejelafuncin.Nosetieneaccesoalosvaloresretornadosporla
funcin.
Elhooktipo"line"esinvocadocuandoelintrpretevaacomenzarlaejecucindeunanuevalnea
de cdigo, o cuando salta hacia atrs en el cdigo (incluso en la misma lnea). (Este evento slo
ocurrecuandoLuaestejecutandounafuncinLua.)
Elhooktipo"count"esinvocadodespusdequeelintrpreteejecuteunnmerodeinstrucciones
igualacount.(EsteeventosloocurrecuandoLuaestejecutandounafuncinLua.)
Unhooksedeshabilitaestableciendomaskacero.

lua_setlocal
const char *lua_setlocal (lua_State *L, lua_Debug *ar, int n);

[(0|1),+0,]

Estableceelvalordeunavariablelocaldeunregistrodeactivacindado.Losargumentosarynsoncomo
losdelua_getlocal.lua_setlocalasignaelvalorenlapartesuperiordelapilaalavariableyretorna
sunombre.Tambineliminadelapilasuvalor.
RetornaNULL(ynohacenadaconlapila)cuandoelndiceesmayorqueelnmerodevariableslocales
activas.

lua_setupvalue
[(0|1),+0,]
https://www.lua.org/manual/5.1/es/manual.html#2.1

40/72

26/5/2016

Manual de Referencia de Lua 5.1

const char *lua_setupvalue (lua_State *L, int funcindex, int n);


Establece el valor de un upvalue de una instancia. Los argumentos funcindex y n son como los de
lua_getupvalue.Asignaelvalorqueestenlapartesuperiordelapilaalupvalueyretornasunombre.
Tambineliminadelapilaelvalor.
RetornaNULL(ynohacenadaconlapila)cuandoelndiceesmayorqueelnmerodeupavalues.

4Labibliotecaauxiliar
La biblioteca auxiliar proporciona varias funciones convenientes para realizar la interface de C con Lua.
MientrasquelaAPIbsicaproporcionalasfuncionesprimitivasparatodaslasinteracionesentreCyLua,la
bibliotecaauxiliarproporcionafuncionesdealtonivelparaalgunastareascomunes.
Todaslasfuncionesdelabibliotecaauxiliarestndefinidasenelficherodecabeceralauxlib.hyllevan
elprefijoluaL_.
TodasellasestnconstruidasencimadelaAPIbsicaasquerealmentenoproporcionannadanuevoque
nopuedaserrealizadoconlaAPI.
Algunas funciones en la biblioteca auxiliar son usadas para verificar argumentos de funciones C. Sus
nombres son siempre luaL_check* o luaL_opt*. Todas estas funciones activan un error si la
verificacin no se satisface. Debido a que el mensaje de error se formatea para los argumentos (por
ejemplo,"bad argument #1"),nosedeberanusarestasfuncionesparaotrosvaloresdelapila.

4.1Funcionesytipos
Aqutenemoslalistadetodaslasfuncionesytiposdelabibliotecaauxiliarporordenalfabtico.

luaL_addchar
void luaL_addchar (luaL_Buffer *B, char c);

[0,+0,m]

AadeelcarctercalbufferB(vaseluaL_Buffer).

luaL_addlstring
void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);

[0,+0,m]

AadeelstringalqueapuntasconlongitudlalbufferB(vaseluaL_Buffer).Elstringpuedecontener
ceros.

luaL_addsize
void luaL_addsize (luaL_Buffer *B, size_t n);

[0,+0,m]

Aade un string de longitud n previamente copiado en el rea del buffer (vase luaL_prepbuffer) al
bufferB(vaseluaL_Buffer).

luaL_addstring
void luaL_addstring (luaL_Buffer *B, const char *s);

[0,+0,m]

AadeunstringterminadoenceroalqueapuntasalbufferB(vaseluaL_Buffer).Elstringnopuede
contenerceros.

luaL_addvalue
void luaL_addvalue (luaL_Buffer *B);

[1,+0,m]

AadeelvalorsituadoenlapartesuperiordelapilaalbufferB(vaseluaL_Buffer),eliminndolodela
https://www.lua.org/manual/5.1/es/manual.html#2.1

41/72

26/5/2016

Manual de Referencia de Lua 5.1

pila.
staeslanicafuncinasociadaalosbuffersdestringquepuede(ydebe)serinvocadaconunelemento
extraenlapila,queeselvalorquedebeseraadidoalbuffer.

luaL_argcheck
void luaL_argcheck (lua_State *L,
int cond,
int narg,
const char *extramsg);

[0,+0,v]

Verificasicondesverdadero.Sinoesasactivaunerrorconelmensaje
"bad argument #<numarg> to <func> (<extramsg>)"
dondefuncesrecuperadodelapiladellamada.

luaL_argerror
int luaL_argerror (lua_State *L, int narg, const char *extramsg);

[0,+0,v]

Activaunerrorconelmensaje
"bad argument #<numarg> to <func> (<extramsg>)"
dondefuncesrecuperadodelapiladellamada.
Esta funcin nunca retorna, pero es corriente usarla en funciones C en la forma return
luaL_argerror(args).

luaL_Buffer
typedef struct luaL_Buffer luaL_Buffer;
Tipoparaunbufferdestring.
UnbufferdestringpermitealcdigoenCconstruiratrozosstringsdeLua.Sumetodologadeusoescomo
sigue:
PrimerosedeclaraunavariablebdetipoluaL_Buffer.
LuegoseinicializalamismaconunallamadaaluaL_buffinit(L, &b).
Entoncesseaadenlaspiezasdelstringalbuffer,invocandoalgunadelasfuncionesluaL_add*.
SefinalizallamandoaluaL_pushresult(&b).Estallamadadejaelstringfinalenlapartesuperior
delapila.
Durante su operacin normal, un buffer de strings usa un nmero variable de posiciones en la pila.As,
mientrasseestusandoelbuffer,nosepuedeasumirqueseconocelaposicindelapartesuperiordela
pila.Sepuedeusarlapilaentrellamadassucesivasalasoperacionesdebuffersiemprequesuusoest
equilibrado esto es, cuando se invoca una operacin con el buffer, la pila est al mismo nivel en el que
estaba inmediatamente antes de la operacin previa con el buffer. (La nica excepcin a esta regla es
luaL_addvalue.)DespusdellamaraluaL_pushresultlapilaestdenuevoenelmismonivelque
tenacuandoelbufferfueinicializado,mselstringfinalensupartesuperior.

luaL_buffinit
void luaL_buffinit (lua_State *L, luaL_Buffer *B);

[0,+0,e]

Inicializa un buffer B. Esta funcin no reserva ningn espacio nuevo de memoria el buffer debe ser
declaradocomovariable(vaseluaL_Buffer).

luaL_callmeta
int luaL_callmeta (lua_State *L, int obj, const char *e);
https://www.lua.org/manual/5.1/es/manual.html#2.1

[0,+(0|1),e]
42/72

26/5/2016

Manual de Referencia de Lua 5.1

Invocaunmetamtodo.
Sielobjetoconndiceobjtieneunametatablaystatieneuncampoe,estafuncinllamaaestecampoy
le pasa el objeto como nico argumento. En este caso la funcin retorna 1 y coloca en la pila el valor
devueltoporlallamada.Sinohaymetatablaonohaymetamtodolafuncinretorna0(sincolocarningn
valorenlapila).

luaL_checkany
void luaL_checkany (lua_State *L, int narg);

[0,+0,v]

Verificasilafuncintieneunargumentodealgntipo(incluyendonil)enlaposicinnarg.

luaL_checkint
int luaL_checkint (lua_State *L, int narg);

[0,+0,v]

Verificasielargumentonargdelafuncinesunnmeroyretornaestenmerocomoint(realizandoun
castenC).

luaL_checkinteger
lua_Integer luaL_checkinteger (lua_State *L, int narg);

[0,+0,v]

Verificasielargumentonargdelafuncinesunnmeroyloretornacomotipolua_Integer.

luaL_checklong
long luaL_checklong (lua_State *L, int narg);

[0,+0,v]

Verificasielargumentonargdelafuncinesunnmeroyloretornacomolong(realizandouncastenC).

luaL_checklstring
const char *luaL_checklstring (lua_State *L, int narg, size_t *l);

[0,+0,v]

Verifica si el argumento narg de la funcin es un string y retorna el mismo si l no es NULL coloca la


longituddelstringen*l.
Esta funcin usa lua_tolstring para obtener su resultado, por lo que todas las conversiones y
precaucionesasociadosaesafuncinseaplicanaqu.

luaL_checknumber
lua_Number luaL_checknumber (lua_State *L, int narg);

[0,+0,v]

Verificasielargumentonargdelafuncinesunnmeroyretornaelmismo.

luaL_checkoption
int luaL_checkoption (lua_State *L,
int narg,
const char *def,
const char *const lst[]);

[0,+0,v]

Verifica si el argumento narg de la funcin es un string y busca ste en el array lst (que debe estar
terminado con NULL). Retorna el ndice en el array donde se encontr el string. Activa un error si el
argumentonoesunstringosinopudoserencontradoelstring.
SidefnoesNULL,seusadefcomovalorpordefectocuandolafuncinnotieneunargumentonargosi
esteargumentoesnil.
staesunafuncintilparahacercorresponderstringsconenumeracionesdeC.Laconvencinnormalen
lasbibliotecasdeLuaesusarstringsenlugardenmerosparaseleccionaropciones.
https://www.lua.org/manual/5.1/es/manual.html#2.1

43/72

26/5/2016

Manual de Referencia de Lua 5.1

luaL_checkstack
void luaL_checkstack (lua_State *L, int sz, const char *msg);

[0,+0,v]

Incrementaeltamaodelapilaatop + szelementos,activandounerrorsilapilanopuedecrecerhasta
esetamao.msgesuntextoadicionalqueiraenelmensajedeerror.

luaL_checkstring
const char *luaL_checkstring (lua_State *L, int narg);

[0,+0,v]

Verificasielargumentonargdelafuncinesunstringyretornaste.
Esta funcin usa lua_tolstring para obtener su resultado, por lo que todas las conversiones y
precaucionesasociadosaesafuncinseaplicanaqu.

luaL_checktype
void luaL_checktype (lua_State *L, int narg, int t);

[0,+0,v]

Verificasielargumentonargdelafuncintienetipot.

luaL_checkudata
void *luaL_checkudata (lua_State *L, int narg, const char *tname);

[0,+0,v]

Verificasielargumentonargdelafuncinesunuserdatadeltipotname(vaseluaL_newmetatable).

luaL_dofile
int luaL_dofile (lua_State *L, const char *filename);

[0,+?,m]

Cargayejecutaelficherodado.Estdefinidaenunamacro:
(luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))
Devuelve0sinohayerrores1encasodeerror.

luaL_dostring
int luaL_dostring (lua_State *L, const char *str);

[0,+?,m]

Cargayejecutaelstringdado.Estdefinidaenunamacro:
(luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0))
Devuelve0sinohayerrores1encasodeerror.

luaL_error
int luaL_error (lua_State *L, const char *fmt, ...);

[0,+0,v]

Activaunerror.Elformatodelmensajeestdadoporfmtmscualesquieraargumentosextra,siguiendo
lasmismasreglasdelua_pushfstring.Tambinaadealprincipiodelmensajeelnombredelficheroy
elnmerodelneadondeocurrielerror,siestainformacinestdisponible.
Esta funcin nunca retorna, pero es corriente usarla en la forma return luaL_error(args) en
funcionesC.

luaL_getmetafield
int luaL_getmetafield (lua_State *L, int obj, const char *e);

[0,+(0|1),m]

Colocaenlapartesuperiordelapilaelcampoedelametatabladelobjetosituadoenlaposicindelndice
https://www.lua.org/manual/5.1/es/manual.html#2.1

44/72

26/5/2016

Manual de Referencia de Lua 5.1

obj.Sielobjetonotienemetatablaosielobjetonotieneestecamporetorna0ydejalapilaintacta.

luaL_getmetatable
void luaL_getmetatable (lua_State *L, const char *tname);

[0,+1,]

Coloca en la parte superior de la pila la metatabla asociada con el nombre tname en el registro (vase
luaL_newmetatable).

luaL_gsub
const char *luaL_gsub (lua_State *L,
const char *s,
const char *p,
const char *r);

[0,+1,m]

Creaunacopiadelstringsreemplazandocualquieraparicindelstringpporelstringr. Coloca el string


resultanteenlapartesuperiordelapilaydevuelvesuvalor.

luaL_loadbuffer
int luaL_loadbuffer (lua_State *L,
const char *buff,
size_t sz,
const char *name);

[0,+1,m]

Carga un buffer como chunk de Lua. Esta funcin usa lua_load para cargar el chunk en el buffer
apuntadoporbuffcontamaosz.
Esta funcin retorna el mismo resultado que lua_load. name es el nombre del chunk, usado para
informacindedepuracinyenlosmensajesdeerror.

luaL_loadfile
int luaL_loadfile (lua_State *L, const char *filename);

[0,+1,m]

Carga un fichero como chunk de Lua. Esta funcin usa lua_load para cargar el chunk que est en el
ficherofilename.SifilenameesNULLentoncessecargadesdelaentradaestndar.Laprimeralnea
enelficheroseignorasicomienzapor#.
Estafuncinretornaelmismoresultadoquelua_load,perotieneuncdigoextradeerrorLUA_ERRFILE
sinopuedeleeroabrirelfichero.
Comolua_loadestafuncinslocargaelchunkynoloejecuta.

luaL_loadstring
int luaL_loadstring (lua_State *L, const char *s);

[0,+1,m]

CargaunstringcomochunkdeLua.Estafuncinusalua_loadparacargarelchunkqueestenelstring
sterminadoenuncarctercero.
Estafuncinretornaelmismoresultadoquelua_load.
Comolua_loadestafuncinslocargaelchunkynoloejecuta.

luaL_newmetatable
int luaL_newmetatable (lua_State *L, const char *tname);

[0,+1,m]

Sielregistrotieneyaunaclavetnameretorna0.Encasocontrariocreaunanuevatablaqueserusada
comometatabladeluserdata,aadiendolaclavetnamealregistro,yretornando1.
Enamboscasocolocaenlapartesuperiordelapilaelvalorfinalasociadocontnameenelregistro.
https://www.lua.org/manual/5.1/es/manual.html#2.1

45/72

26/5/2016

Manual de Referencia de Lua 5.1

luaL_newstate
lua_State *luaL_newstate (void);

[0,+0,]

CreaunnuevoestadodeLua,invocandolua_newstateconunafuncindereservadememoriabasada
en la funcin C estndar realloc y estableciendo una funcin de "pnico" (vase lua_atpanic) que
imprimeunmensajeenlasalidaestndardeerrorencasodeerrorfatal.
RetornaelnuevoestadooNULLsisurgiunerrordereservadememoria.

luaL_openlibs
void luaL_openlibs (lua_State *L);

[0,+0,m]

AbretodaslasbibliotecasestndardeLuaenelestadodado.

luaL_optint
int luaL_optint (lua_State *L, int narg, int d);

[0,+0,v]

Si el argumento narg de la funcin es un nmero retorna ste como un int. Si este argumento est
ausenteoesnilretornad.Enotrocasoactivaunerror.

luaL_optinteger
lua_Integer luaL_optinteger (lua_State *L,
int narg,
lua_Integer d);

[0,+0,v]

Si el argumento narg de la funcin es un nmero retorna el mismo como lua_Integer. Si este


argumentoestausenteoesnilretornad.Encasocontrarioactivaunerror.

luaL_optlong
long luaL_optlong (lua_State *L, int narg, long d);

[0,+0,v]

Si el argumento narg de la funcin es un nmero retorna el mismo como long. Si este argumento est
ausenteoesnilretornad.Encasocontrarioactivaunerror.

luaL_optlstring
const char *luaL_optlstring (lua_State *L,
int narg,
const char *d,
size_t *l);

[0,+0,v]

Si el argumento narg de la funcin es un string retorna ste. Si este argumento est ausente o es nil
retornad.Encasocontrarioactivaunerror.
SilnoesNULLcolocalalongituddelresultadoen*l.

luaL_optnumber
lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number d);

[0,+0,v]

Sielargumentonargdelafuncinesunnmeroretornaelmismo.Siesteargumentoestausenteoes
nilretornad.Encasocontrarioactivaunerror.

luaL_optstring
const char *luaL_optstring (lua_State *L,
int narg,
const char *d);
https://www.lua.org/manual/5.1/es/manual.html#2.1

[0,+0,v]

46/72

26/5/2016

Manual de Referencia de Lua 5.1

Si el argumento narg de la funcin es un string retorna ste. Si este argumento est ausente o es nil
retornad.Encasocontrarioactivaunerror.

luaL_prepbuffer
char *luaL_prepbuffer (luaL_Buffer *B);

[0,+0,]

RetornaunadireccinqueapuntaaunespaciodetamaoLUAL_BUFFERSIZEdondesepuedecopiarun
stringparaseraadidoalbufferB(vaseluaL_Buffer).Despusdecopiarelstringenesteespaciose
debeinvocarluaL_addsizeconeltamaodelstringparaaadirlorealmenteenelbuffer.

luaL_pushresult
void luaL_pushresult (luaL_Buffer *B);

[?,+1,m]

FinalizaelusodelbufferBdejandoelstringenlapartesuperiordelapila.

luaL_ref
int luaL_ref (lua_State *L, int t);

[1,+0,m]

Creayretornaunareferenciaenlatablaenlaposicindelndicetparaelobjetoenlapartesuperiordela
pila(yeliminaelmismodelapila).
Una referencia es una clave entera nica. Mientras que no se aadan manualmente claves enteras a la
tablat,luaL_refaseguralaunicidaddelaclavequeretorna.Sepuederecuperarunobjetoapuntadopor
lareferenciarinvocandolua_rawgeti(L, t, r).LafuncinluaL_unrefeliminaunareferenciaysu
objetoasociado.
Si el objeto en la parte superior de la pila es nil, luaL_ref retorna la constante LUA_REFNIL. Est
garantizadoquelaconstanteLUA_NOREFesdiferentedecualquierreferenciaretornadaporluaL_ref.

luaL_Reg
typedef struct luaL_Reg {
const char *name;
lua_CFunction func;
} luaL_Reg;
TipoparaarraysdefuncionesparaserregistradasporluaL_register.nameeselnombredelafuncin
yfuncesunpunteroalamisma.CualquierarraydeluaL_Regdebefinalizarconunaentrada"centinela"
enlaquetantonamecomofuncsonNULL.

luaL_register
void luaL_register (lua_State *L,
const char *libname,
const luaL_Reg *l);

[(0|1),+1,m]

Abreunabiblioteca.
CuandosellamaconlibnameigualaNULLsimplementeregistratodaslasfuncionesdelalistal(vase
luaL_Reg)enlatablaqueestenlapartesuperiordelapila.
Cuandosellamaconunvalorlibnamenonulocreaunanuevatablat,establecelamismacomovalorde
lavariablegloballibname,establecelamismacomovalordepackage.loaded[libname]yregistraen
ellatodaslasfuncionesdelalistal.Siexisteunatablaenpackage.loaded[libname]oenlavariable
libnamereutilizaestatablaenlugardecrearunanueva.
Encualquiercasolafuncindejalatablaenlapartesuperiordelapila.

luaL_typename
[0,+0,]
https://www.lua.org/manual/5.1/es/manual.html#2.1

47/72

26/5/2016

Manual de Referencia de Lua 5.1

const char *luaL_typename (lua_State *L, int index);


Retornaelnombredeltipodelvalorsituadoenelndicedado.

luaL_typerror
int luaL_typerror (lua_State *L, int narg, const char *tname);

[0,+0,v]

Generaunerrorconunmensajedelaforma:
location: bad argument narg to function (tname expected, got rt)
donde location est producida por luaL_where, function es el nombre de la funcin actual y rt es el
nombredeltipodelargumentoactual.

luaL_unref
void luaL_unref (lua_State *L, int t, int ref);

[0,+0,]

Liberalareferenciarefdelatablaenelndicet(vaseluaL_ref).Laentradaeseliminadadelatabla,
porloquelamemoriareservadaparaelobjetoreferidoenlamismapuedeserliberada.Lareferenciaref
tambinesliberadaparapoderserreutilizada.
SirefesLUA_NOREFoLUA_REFNIL,luaL_unrefnohacenada.

luaL_where
void luaL_where (lua_State *L, int lvl);

[0,+1,m]

Colocaenlapartesuperiordelapilaunstringidentificandolaposicinactualdelcontrolenelnivellvlen
lapiladellamada.Tpicamenteestestringtieneelformato:
chunkname:currentline:
Nivel0eslafuncinactualmenteejecutndose,nivel1eslafuncinquellamalafuncinactual,etc.
Estafuncinseusaparaconstruirunprefijoparalosmensajesdeerror.

5Bibliotecasestndar
Las bibliotecas estndar de Lua proporcionan funciones tiles que estn implementadas directamente a
travsdelaAPIdeC.Algunasdeestasfuncionesproveenserviciosesencialesallenguaje(porejemplo,
type y getmetatable) otras proporcionan acceso a servicios "externos" (por ejemplo, I/O) y otras
podranserimplementadasenLuamismoperosonmuytilesotienenrequerimientoscrticosdetiempode
ejecucinymerecenunaimplementacinenC(porejemplo,sort).
TodaslasbibliotecasestnimplementadasatravsdelaAPIoficialdeCyseproporcionancomomdulos
separadosenC.EnestosmomentosLuatienelassiguientesbibliotecasestndar:
bibliotecabsica
bibliotecadeempaquetado
manejodestrings
manejodetablas
funcionesmatemticas(sin,log,etc.)
entradaysalida(I/O)
interaccinconelsistemaoperativo
utilidadesdedepuracin.
Excepto para las bibliotecas bsica y de empaquetado, cada biblioteca proporciona todas sus funciones
comocamposdetablasglobalesocomomtodosdesusobjetos.
ParateneraccesoaestasbibliotecaselprogramaanfitrinenCdebeinvocaraluaL_openlibs,lacual
https://www.lua.org/manual/5.1/es/manual.html#2.1

48/72

26/5/2016

Manual de Referencia de Lua 5.1

abre todas las bibliotecas estndar. De manera alternativa se pueden abrir individualmente invocando a
luaopen_base (la biblioteca bsica), luaopen_package (la biblioteca de empaquetado),
luaopen_string(labibliotecadestrings),luaopen_table(labibliotecadetablas),luaopen_math(la
biblioteca matemtica), luaopen_io (la biblioteca de entrada/salida), luaopen_os (la biblioteca del
SistemaOperativo)yluaopen_debug(labibliotecadedepuracin).Estasfuncionesestndeclaradasen
lualib.hynodeberanserinvocadasdirectamente:sedebenllamarcomoaotrafuncinCcualquierade
Lua,porejemplo,usandolua_call.

5.1Funcionesbsicas
LabibliotecabsicaproporcionaalgunasfuncionesdelncleodeLua.Sinosedeseaincluirestabiblioteca
en una aplicacin se debe analizar cuidadosamente si se necesitan proporcionar implementaciones de
algunasdesusutilidades.

assert(v[,mensaje])
Activaunerrorcuandoelvalordesuargumentovesfalso(porejemplo,nilofalse)enotrocasoretorna
todos sus argumentos. mensaje es un mensaje de error cuando est ausente se utiliza por defecto
"assertion failed!".

collectgarbage(opt[,arg])
Estafuncinesunainterfacegenricaalliberadordememoria.Realizadiversasfuncionesdeacuerdoasu
primerargumento,opt:
"stop":detieneelliberadordememoria.
"restart":reiniciaelliberadordememoria.
"collect":realizaunciclocompletodeliberacindememoria.
"count":devuelvelamemoriatotalenusoporLua(enKbytes).
"step":realizaunpasodeliberacindememoria.El"tamao"delpasosecontrolaporarg(valores
grandessignificanmspasos)deunamaneranoespecificada.Sisedeseacontrolareltamaodel
pasosedebeafinarexperimentalmenteelvalordearg.Devuelvetruesielpasoacabaunciclode
liberacin.
"steppause":establecearg/100comoelnuevovalorparalapausadelliberador(vase2.10).
"setstepmul": establece arg/100 como el nuevo valor para el multiplicador del paso del liberador
(vase2.10).

dofile(nombre_de_fichero)
AbreelficheroconelnombredadoyejecutasucontenidocomounchunkdeLua.Cuandoseinvocasin
argumentos, dofile ejecuta el contenido de la entrada estndar (stdin). Devuelve todos los valores
retornadosporelchunk.Encasodeerror,dofilepropagaelerrorasuinvocador(estoes,dofilenose
ejecutaenmodoprotegido).

error(mensaje[,nivel])
Termina la ltima funcin protegida llamada, estableciendo mensaje como mensaje de error. La funcin
errornuncaretorna.
Normalmenteerroraade,alcomienzodelmensaje,ciertainformacinacercadelaposicindelerror.El
argumentonivel especifica cmo obtener la posicin del error. Con nivel 1 (por defecto) la posicin del
erroresdondefueinvocadalafuncinerror.Nivel2apuntaelerrorhaciaellugarenquefueinvocadala
funcin que llam a error y as sucesivamente. Pasar un valor 0 como nivel evita la adicin de la
informacindelaposicinalmensaje.

_G
Unavariableglobal(nounafuncin)quealmacenaelentornoglobal(osea,_G._G = _G).Luamismono
usaestavariablecambiarsuvalornoafectaningnentorno,niviceversa.(sesesetfenvparacambiar
entornos.)

https://www.lua.org/manual/5.1/es/manual.html#2.1

49/72

26/5/2016

Manual de Referencia de Lua 5.1

getfenv([f])
Retorna el entorno actualmente en uso por la funcin. f puede ser una funcin Lua o un nmero que
especificalafuncinaeseniveldelapila:nivel1eslafuncinqueinvocaagetfenv.Silafuncindada
noesunafuncinLuaosifes0,getfenvretornaelentornoglobal.Elvalorpordefectodefes1.

getmetatable(objeto)
Siobjeto no tiene una metatabla devuelve nil. En otro caso, si la metatabla del objeto tiene un campo
"__metatable"retornaelvalorasociado,osinoesasretornalametatabladelobjetodado.

ipairs(t)
Retornatresvalores:unafunciniteradora,latablat,y0,detalmodoquelaconstruccin
for i,v in ipairs(t) do bloque end
iterarsobrelospares(1,t[1]),(2,t[2]),,hastalaprimeraclaveenteraconunvalornilenlatabla.

load(func[,nombre_de_chunk])
Cargaunchunkusandolafuncinfuncparaobtenersuspartes.Cadallamadaafuncdeberetornarun
stringqueseconcatenaconlosresultadosprevios.Unretornodenil(onovalor)sealaelfinaldelchunk.
Sinohayerroresretornaelchunkcompiladocomounafuncinenotrocasoretornanilmsunmensaje
deerror.Elentornodelafuncinretornadaeselglobal.
nombre_de_chunk se utiliza para identificar el chunk en los mensajes de error y para informacin de
depuracin.

loadfile([nombre_de_fichero])
Similaraload,peroobtieneelchunkdelficheronombre_de_ficheroodelaentradaestndarsinose
proporcionaunnombre.

loadstring(string[,nombre_de_chunk])
Similaraload,peroobtieneelchunkdelstringproporcionado.
Paracargaryejecutarunstringdadosese
assert(loadstring(s))()
Cuandoestausente,nombre_de_chunktomapordefectoelstringdado.

next(tabla[,ndice])
Permite al programa recorrer todos los campos de una tabla. Su primer argumento es una tabla y su
segundo argumento es un ndice en esta tabla. next retorna el siguiente ndice de la tabla y su valor
asociado. Cuando se invoca con nil como segundo argumento next retorna un ndice inicial y su valor
asociado. Cuando se invoca con el ltimo ndice o con nil en una tabla vaca next retorna nil. Si el
segundoargumentoestausenteentoncesseinterpretacomonil. En particular se puede usar next(t)
paracomprobarsiunatablaestvaca.
El orden en que se enumeran los ndices no est especificado, incluso para ndices numricos. (Para
recorrerunatablaenordennumricoseseelfornumricoolafuncinipairs.)
Elcomportamientodenextesindefinidosiduranteelrecorridoseasignaunvalorauncamponoexistente
previamente en la tabla. No obstante se pueden modificar campos existentes. En particular se pueden
borrarcamposexistentes.

pairs(t)
https://www.lua.org/manual/5.1/es/manual.html#2.1

50/72

26/5/2016

Manual de Referencia de Lua 5.1

Retornatresvalores:lafuncinnext,latablat,ynil,porloquelaconstruccin
for k,v in pairs(t) do bloque end
iterarsobretodaslasparejasclavevalordelatablat.
Vasenextparalasprecaucionesatomarcuandosemodificalatabladurantelasiteraciones.

pcall(f,arg1,)
Invocalafuncinfconlosargumentosdadosenmodoprotegido.Estosignificaqueningnerrordentrode
fsepropagaensulugarpcallcapturaelerroryretornauncdigodeestatus.Suprimerresultadoesel
cdigodeestatus(booleano),elcualesverdaderosilallamadatienexitosinerrores.Enesecasopcall
tambindevuelvetodoslosresultadosdelallamadadespusdelprimerresultado.Encasodeerrorpcall
retornafalsemsunmensajedeerror.

print()
Recibecualquiernmerodeargumentoseimprimesusvaloresenelficheroestndardesalida(stdout),
usando tostring como funcin para convertir los argumentos a strings. print no est diseada para
salida formateada sino slo como una manera rpida de mostrar valores, tpicamente para la depuracin
delcdigo.Parasalidaformateadasesestring.format.

rawequal(v1,v2)
Verificasiv1esigualav2,sininvocarningnmetamtodo.Devuelveunbooleano.

rawget(tabla,ndice)
Obtiene el valor real de tabla[ndice] sin invocar ningn metamtodo. tabla debe ser una tabla e
ndicecualquiervalordiferentedenil.

rawset(tabla,ndice,valor)
Asigna valor a tabla[ndice] sin invocar ningn metamtodo. tabla debe ser una tabla, ndice
cualquiervalordiferentedenilyvalorunvalorcualquieradeLua.

select(ndice,)
Sindiceesunnmeroretornatodoslosargumentosdespusdelnmerondice.Enotrocasondice
debeserelstring"#",yselectretornaelnmerototaldeargumentosextraquerecibe.

setfenv(f,tabla)
Estableceelentornoquevaaserusadoporunafuncin.fpuedeserunafuncinLuaounnmeroque
especifica la funcin al nivel de pila: nivel 1 es la funcin que invoca a setfenv. setfenv retorna la
funcindada.
Como caso especial, cuando f es 0 setfenv cambia el entorno del proceso que est en ejecucin. En
estecasosetfenvnoretornavalores.

setmetatable(tabla,metatabla)
Establece la metatabla de una tabla dada. (No se puede cambiar la metatabla de otros tipos desde Lua,
sinoslodesdeC.)Simetatablaesnilentoncesseeliminalametatabladelatabladada.Silametatabla
originaltieneuncampo"__metatable"seactivaunerror.
Estafuncinretornatabla.

tonumber(e[,base])
Intentaconvertirsuargumentoenunnmero.Sielargumentoesyaunnmeroounstringconvertibleaun
https://www.lua.org/manual/5.1/es/manual.html#2.1

51/72

26/5/2016

Manual de Referencia de Lua 5.1

nmeroentoncestonumberretornaestenmeroenotrocasodevuelvenil.
Unargumentoopcionalespecificalabaseparainterpretarelnmero.Labasepuedesercualquierentero
entre 2 y 36, ambos inclusive. En bases por encima de 10 la letra 'A' (en mayscula o minscula)
representa10,'B'representa11,yassucesivamente,con'Z'representando35.Enbase10(pordefecto),
elnmeropuedetenerpartedecimal,ascomounexponenteopcional(vase2.1).Enotrasbasesslose
aceptanenterossinsigno.

tostring(e)
Recibeunargumentodecualquiertipoyloconvierteenunstringconunformatorazonable.Parauncontrol
completodecmoseconviertenlosnmeros,sesestring.format.
Silametatabladeetieneuncampo"__tostring"entoncestostringinvocaalcorrespondientevalor
conecomoargumentoyusaelresultadodelallamadacomosupropioresultado.

type(v)
Retornaeltipodesunicoargumento,codificadocomostring.Losposiblesresultadosdeestafuncinson
"nil"(unstring,noelvalornil),"number","string","boolean,"table","function","thread"
y"userdata".

unpack(lista[,i[,j]])
Retornaloselementosdeunatabladada.Estafuncinequivalea
return lista[i], lista[i+1], , lista[j]
exceptoqueestecdigopuedeserescritosloparaunnmerofijodeelementos.Pordefectoies1yjes
lalongituddelalista,comosedefineatravsdeloperadorlongitud(vase2.5.5).

_VERSION
Unavariableglobal(nounafuncin)quealmacenaunstringquecontienelaversinactualdelintrprete.
EnestaversindeLuaelcontenidoactualdeestavariablees"Lua 5.1".

xpcall(f,err)
Estafuncinessimilarapcall,exceptoquesepuedeestablecerunmanejadordeerror.
xpcall invoca a la funcin f en modo protegido, usando err como manejador de error. Ningn error
dentrodefsepropagaensulugarxpcallcapturaelerror,llamandoalafuncinerrconelobjetode
error original, y retorna un cdigo de estatus. Su primer resultado es el cdigo de estatus (un booleano),
que es verdadero si la llamada tiene xito sin errores. En ese caso xpcall tambin devuelve todos los
resultados de la llamada despus del primer resultado. En caso de error xpcall retorna false ms el
resultadodeerr.

5.2Manejodecorutinas
Las operaciones relacionadas con corutinas comprenden una subbiblioteca de la biblioteca bsica y se
sitaenlatablacoroutine.Vase2.11paraunadescripcingeneraldelascorutinas.

coroutine.create(f)
Crea una nueva corutina con cuerpo f. f debe ser una funcin Lua. Retorna una nueva corutina, un
objetodetipo"thread".

coroutine.resume(co[,val1,])
Comienzaocontinalaejecucindelacorutinaco.Laprimeravezquesellamaaestafuncinlacorutina
comienzaejecutandosucuerpo.Losvaloresval1,sepasancomoargumentosalcuerpodelafuncin.
Si la corutina ha cedido el control del flujo, resume la reinicia los valores val1, son pasados como
https://www.lua.org/manual/5.1/es/manual.html#2.1

52/72

26/5/2016

Manual de Referencia de Lua 5.1

resultadosdelacesin.
Silacorutinaseejecutasinerrorresumeretornatruemslosvalorespasadosayield (si la corutina
realiza la cesin) o los valores retornados por el cuerpo de la funcin (si la corutina acaba). Si existe
cualquiererrorresumeretornafalsemsunmensajedeerror.

coroutine.running()
Retornalacorutinaenejecucinonilcuandoseinvocadesdeelprocesoprincipal.

coroutine.status(co)
Retornaelestatusdelacorutinacocomounstring:"running",silacorutinaestenejecucin(estoes,
invocastatus)"suspended",silacorutinaestsuspendidaenunallamadaayield,ositodavano
ha comenzado a ejecutarse "normal" si la corutina est activa pero no ejecutndose (esto es, si ha
resumidootracorutina)y"dead"silacorutinahafinalizadosufuncinosisehadetenidoconunerror.

coroutine.wrap(f)
Creaunanuevacorutinaconcuerpof.fdebeserunafuncinLua.Retornaunafuncinqueresumela
corutina cada vez que es invocada. Cualquier argumento pasado a la funcin se comporta como un
argumento extra para resume. Retorna los mismos valores devueltos por resume, excepto el primer
booleano.Encasodeerror,stesepropaga.

coroutine.yield()
Suspendelaejecucindelacorutinainvocante.LacorutinanopuedeestarejecutandounafuncinC,un
metamtodoouniterador.Cualquierargumentodeyieldespasadocomoresultadoextraaresume.

5.3Mdulos
La biblioteca de empaquetado proporciona utilidades bsicas para cargar y construir mdulos en Lua.
Exportadosdesusfuncionesdirectamentealentornoglobal:moduleyrequire.Lasdemsseexportan
enlatablapackage.

module(nombre[,])
Crea un mdulo. Si existe una tabla en package.loaded[nombre] sta es el mdulo. En otro caso si
existeunatablaglobaltconelnombredadostaeselmdulo.Sino,finalmente,creaunanuevatablaty
le da el nombre global de nombre y el valor de package.loaded[nombre]. Esta funcin tambin
inicializat._NAMEconelnombredado,t._Mconelmdulo(tmismo),yt._PACKAGEconelnombredel
paquete (el mdulo nombre completo menos su ltimo componente vase ms abajo). Para acabar,
module establece t como nuevo entorno de la funcin actual y el nuevo valor de
package.loaded[nombre],detalmaneraquerequireretornat.
Sinombreesunnombrecompuesto(estoes,unoconcomponentesseparadosporpuntos)modulecrea
(o reutiliza, si ya existen) tablas para cada componente. Por ejemplo, si nombre es a.b.c, entonces
modulealmacenalatablamduloenelcampocdelcampobdelatablaglobala.
Estafuncinpuederecibirargumentosopcionalesdespusdelnombredelmdulo,dondecadaopcines
unafuncinqueseraplicadasobreelmdulo.

require(nombre)
Carga el mdulo dado. La funcin comienza buscando en la tabla package.loaded para determinar si
nombre est ya cargado. Si es as entonces require devuelve el valor almacenado en
package.loaded[nombre].Enotrocasointentaencontraruncargadorparaelmdulo.
Paraencontraruncargador,primerorequireseguaporpackage.preload[nombre].Cambiandoeste
array,secambialamaneraqueenrequirebuscaunmdulo.Lasiguienteexplicacinestbasadaenla
configuracinpordefectodepackage.loaders.
https://www.lua.org/manual/5.1/es/manual.html#2.1

53/72

26/5/2016

Manual de Referencia de Lua 5.1

Primero require mira en package.prelodad[modname]. Si tiene un valor, ste (que debe ser una
funcin)eselcargador.EnotrocasorequirebuscauncargadorenLuausandoelcaminodebsqueda
guardadoenpackage.path.Sitambinestofalla,buscauncargadorenCusandoelcaminoalmacenado
en package.cpath. Si tambin finalmente esto falla intenta un cargador todo en uno (vase
package.loaders).
Unavezqueseencontrelcargador,requireloinvocaconunnicoargumento,nombre.Sielcargador
retornaunvalor,requireloasignaapackage.loaded[nombre].Sielcargadornoretornaunvaloryno
estasignadounvalorapackage.loaded[nombre],entoncesrequireasignatrueaestaentrada.En
cualquiercaso,requireretornaelvalorfinaldepackage.loaded[nombre].
Si existen errores durante la carga o ejecucin del mdulo en proceso o si no se pudo encontrar un
cargadorparaelmdulo,entoncesrequireactivaunerror.

package.cpath
ElcaminodebsquedausadoporrequireparabuscaruncargadorenC.
Lua inicializa este camino package.cpath de la misma manera en que inicializa el camino de Lua
package.path,usandolavariabledeentornoLUA_CPATH(ademsdeotrocaminopordefectodefinido
enluaconf.h).

package.loaded
Una tabla usada por require para controlar qu mdulos estn ya cargados. Cuando se solicita un
mdulo nombre y package.loaded[nombre] no es falso, require simplemente retorna el valor
almacenado.

package.loaders
Unatablausadaporrequirequecontrolacmosecarganlosmdulos
Cadaentradaenestatablaesunafuncinbuscadora.Cuandobuscaunmdulo,require llama a cada
uno de esas buscadoras en orden ascendente, con el nombre del mdulo (el argumento pasado a
require) com nico argumento. La funcin puede retornar otra funcin (el mdulo cargador o un string
que explica que no encontr ese mdulo (o nil si no tuvo nada que decir). Lua inicializa esta tabla con
cuatrofunciones.
Laprimerabuscadorasimplementebuscauncargadorenlatablapackage.preload.
La segunda buscadora busca un cargador como biblioteca de Lua, usando el camino de bsqueda
guardadoenpackage.path.Uncaminoesunasecuenciadeplantillasseparadasporpuntosycomas(;).
En cada plantilla, el buscador cambia cada signo de interrogacin que aparezca por
nombre_de_fichero,queeselnombredelmduloconcadapuntoreemplazadoporun"separadorde
directorios" (como "/" en Unix) entonces intentar abrir el fichero con el nombre resultante. As, por
ejemplo,sielelcaminodeLuaeselstring:
"./?.lua;./?.lc;/usr/local/?/init.lua"
la bsqueda de un fichero fuente de Lua para el mdulo foo intentar abrir los ficheros ./foo.lua.,
./foo.lcy/usr/local/foo/init.lua,eneseorden
La tercera buscadora busca un cargador como biblioteca de C, usando el camino dado en la variable
package.cpath.Porejemplo,sielcaminodeCeselstring:
"./?.so;./?.dll;/usr/local/?/init.so"
la buscadora, para el mdulo foo intentar abrir los ficheros ./foo.so., ./foo.dll y
/usr/local/foo/init.so,eneseorden.UnavezqueencuentreunabibliotecaenC,elbuscadorusa
la utilidad de enlace dinmico para enlazar la aplicacin con la biblioteca. Entones intenta encontrar la
funcin C dentro de la biblioteca para ser usada como cargador. El nombre de esta funcin es el string
"luaopen_"concatenadoconunacopiadelnombredelmdulodondecadapuntoesreemplazadoporun
carcterdesubrayado(_).Adems,sielnombredelmdulotieneunguin,suprefijohastaelprimerguin
incluido se elimina. Por ejemplo, si el nombre del mdulo es a.v1-b.c el nombre de funcin ser
https://www.lua.org/manual/5.1/es/manual.html#2.1

54/72

26/5/2016

Manual de Referencia de Lua 5.1

luaopen_b_c.
La cuarta buscadora intenta un cargador todoenuno. Busca en el camino de C una biblioteca con el
nombre raiz del mdulo dado. Por ejemplo, cuando se pide a.b.c buscar a en una bibliteca C. SI la
encuentra busca dentro de ella una funcin para abrir el submdulo en nuestro ejemplo, sera
luaopen_a_b_c. Con esta utilidad, un paquete puede guardar varios submdulos C en una nica
biblioteca,concadasubmdulomanteniendosufuncinoriginaldeapertura.

package.loadlib(nombre_de_biblioteca,nombre_de_func)
Enlaza dinmicamente el programa anfitrin con la biblioteca en C nombre_de_biblio. Dentro de esta
biblioteca busca una funcin nombre_de_func y la retorna como una funcin C. (Por tanto,
nombre_de_funcdebeseguirelprotocolovaselua_CFunction).
sta es una funcin de bajo nivel. Se salta completamente el sistema de paquetes y de mdulos. A
diferencia de require, no realiza ninguna bsqueda en el camino y no aade automticamente
extensiones. nombre_de_biblio debe ser un nombre completo de fichero de la biblioteca en C,
incluyendo si es necesario el camino completo y la extensin. nombre_de_func debe ser el nombre
exacto exportado por la biblioteca en C (el cual puede depender del compilador de C y del cargador del
sistemaoperativousados).
Esta funcin no est soportada por el C ANSI. Por tanto slo est disponible en algunas plataformas
(Windows, Linux, Mac OS X, Solaris, BSD, adems de otros sistemas Unix que soportan el estndar
dlfcn).

package.path
ElcaminodebsquedausadoporrequireparabuscaruncargadordeLua.
AlcomienzoLuainicializaestavariableconelvalordelavariabledeentornoLUA_PATHoconuncamino
pordefectodefinidoenluaconf.h,silavariabledeentornonoestdefinida.Siaparece";;"enelvalor
delavariabledeentornosereemplazaporelcaminopordefecto.

package.preload
Unatablaquealmacenacargadoresparamdulosespecficos(vaserequire).

package.seeall(mdulo)
Establece una metatabla para mdulo con su campo __index refirindose al entorno global, de tal
manera que este mdulo hereda los valores del entorno global. Se usa como una opcin para la funcin
module.

5.4Manejodestrings
Esta biblioteca proporciona funciones genricas de manejo de strings, tales como encontrar y extraer
substringsydetectarpatrones.CuandoseindexaunstringenLuaelprimercarcterestenlaposicin1
(noen0comoenC).Sepermiteelusodendicesnegativosqueseinterpretancomoindexadohaciaatrs,
desdeelfinaldelstring.Portantoelltimocarcterdelstringestenlaposicin1,yassucesivamente.
La biblioteca de strings proporciona todas sus funciones en la tabla string. Tambin establece una
metatablaparastringdondeelcampo__indexapuntaalamismametatabla.Portanto,sepuedenusar
las funciones de manejo de string en un estilo orientado a objetos. Por ejemplo, string.byte(s, i)
puedeponerses:byte(i).

string.byte(s[,i[,j]])
Devuelveloscdigosnumricosinternosdeloscaracteress[i],s[i+1],,s[j].Elvalorpordefecto
deies1elvalorpordefectodejesi.
Tngase en cuenta que los cdigos numricos no son necesariamente portables de unas plataformas a
otras.
https://www.lua.org/manual/5.1/es/manual.html#2.1

55/72

26/5/2016

Manual de Referencia de Lua 5.1

string.char()
Recibeceroomsenteros.Devuelveunstringconiguallongitudqueelnmerodeargumentos,enelque
cadacarctertieneuncdigonumricointernoigualasucorrespondienteargumento.
Tngase en cuenta que los cdigos numricos no son necesariamente portables de unas plataformas a
otras.

string.dump(function)
Devuelve un string que contiene la representacin binaria de la funcin dada, de tal manera que una
llamada posterior a loadstring con este string devuelve una copia de la funcin. func debe ser una
funcinLuasinupvalues.

string.find(s,patrn[,inicio[,bsica]])
Busca la primera aparicin de patrn en el string s. Si la encuentra, find devuelve los ndices de s
donde comienza y acaba la aparacin en caso contrario retorna nil. Un tercer argumento numrico
opcionalinicioespecificadndecomenzarlabsquedasuvalorpordefectoes1ypuedesernegativo.
Unvalortruecomocuartoargumentoopcionalbsicadesactivalasutilidadesdedeteccindepatrones,
realizandoentonceslafuncinunaoperacinde"bsquedabsicadesubstring",sincaracteres"mgicos"
en el patrn. Tngase en cuenta que si se proporciona el argumento bsica tambin debe
proporcionarseelargumentoinicio.
Si el patrn tiene capturas entonces en una deteccin con xito se devuelven los valores capturados,
despusdelosdosndices.

string.format(formato,)
Devuelveunaversinformateadadesusargumentos(ennmerovariable)siguiendoladescripcindada
ensuprimerargumento(formato,quedebeserunstring).Elstringdeformatosiguelasmismasreglas
quelafamiliadefuncionesCestndarprintf.Lasnicasdiferenciassonquelasopciones/modificadores
*,l,L,n,p,yhnoestnsoportadas,yqueexisteunaopcinextraq.Estaltimaopcindaformatoaun
stringenunaformaadecuadaparaserledademaneraseguradenuevoporelintrpretedeLua:elstring
es escrito entre dobles comillas, y todas las dobles comillas, nuevas lneas, ceros y barras inversas del
stringsesustituyenporlassecuenciasdeescapeadecuadasenlaescritura.Porejemplo,lallamada
string.format('%q', 'un string con "comillas" y \n nueva lnea')
producirelstring:
"un string con \"comillas\" y \
nueva lnea"
Lasopcionesc,d,E,e,f,g,G,i,o,u,X y x esperan un nmero como argumento, mientras que q y s
esperanunstring.
Estafuncinnoaceptavaloresdestringquecontengancaracterescero,exceptocomoargumentosdela
opcinq.

string.gmatch(s,patrn)
Devuelveunafunciniteradoraque,cadavezqueseinvoca,retornalassiguientescapturasdelpatrnen
elstrings.
Sielpatrnnoproducecapturasentonceslacoincidenciacompletasedevuelveencadallamada.
Comoejemplo,elsiguientebucle
s = "hola mundo desde Lua"
for w in string.gmatch(s, "%a+") do
print(w)
end
https://www.lua.org/manual/5.1/es/manual.html#2.1

56/72

26/5/2016

Manual de Referencia de Lua 5.1

iterarsobretodaslaspalabrasdelstrings,imprimiendounaporlnea.Elsiguienteejemplodevuelveen
formadetablatodoslosparesclave=valordelstringdado:
t = {}
s = "desde=mundo, a=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
t[k] = v
end
Para esta funcin, un '^' al principio de un patrn no funciona como un ancla, sino que previene la
iteracin.

string.gsub(s,patrn,reemplazamiento[,n])
Devuelve una copia de s en la que todas (o las n primeras, si se especifica el argumento opcional) las
aparicionesdelpatrnhansidoreemplazadasporelreemplazamientoespecificado,quepuedeserun
string, una tabla o una funcin. gsub tambin devuelve, como segundo valor, el nmero total de
coincidenciasdetectadas.
Sireemplazamientoesunstringentoncessuvalorseusaenlasustitucin.Elcarcter%funcionacomo
un carcter de escape: cualquier secuencia en reemplazamiento de la forma %n, con n entre 1 y 9,
significaelvalordelacapturanmeronenelsubstring(vasemsabajo).Lasecuencia%0significatoda
lacoincidencia.Lasecuencia%%significauncarcterporcentaje%.
Si reemplazamiento es una tabla entonces en cada captura se devuelve el elemento de la tabla que
tieneporclavelaprimeracapturasielpatrnnoproporcionaningunacapturaentoncetodalacoincidencia
seutilizacomoclave.
Sireemplazamientoesunafuncinentonceslamismaesinvocadacadavezqueexistaunacapturacon
todos los substrings capturados pasados como argumentos en el mismo orden si no existen capturas
entoncestodalacoincidenciasepasacomounnicoargumento.
Si el valor devuelto por la tabla o por la llamada a la funcin es un string o un nmero, entonces se usa
como string de reemplazamiento en caso contrario si es false o nil, entonces no se realiza ninguna
sustitucin(estoes,lacoincidenciaoriginalsemantieneenelstring).
Heaqualgunosejemplos:
x = string.gsub("hola mundo", "(%w+)", "%1 %1")
--> x="hola hola mundo mundo"
x = string.gsub("hola mundo", "%w+", "%0 %0", 1)
--> x="hola hola mundo"
x = string.gsub("hola mundo desde Lua", "(%w+)%s*(%w+)", "%2 %1")
--> x="mundo hola Lua desde"
x = string.gsub("casa = $HOME, usuario = $USER", "%$(%w+)", os.getenv)
--> x="casa = /home/roberto, usuario = roberto"
x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
--> x="4+5 = 9"
local t = {nombre="lua", versin="5.1"}
x = string.gsub("$nombre-$versin.tar.gz", "%$(%w+)", t)
--> x="lua-5.1.tar.gz"

string.len(s)
Recibeunstringydevuelvesulongitud.Elstringvaco""tienelongitud0.Loscaracterescerodentrodel
stringtambinsecuentan,porloque"a\000bc\000"tienelongitud5.
https://www.lua.org/manual/5.1/es/manual.html#2.1

57/72

26/5/2016

Manual de Referencia de Lua 5.1

string.lower(s)
Recibeunstringydevuelveunacopiadelmismocontodaslasletrasmaysculascambiadasaminsculas.
Elrestodeloscaracterespermanecesincambios.Ladefinicindeletramaysculadependedelsistema
local.

string.match(s,patrn[,inicio])
Buscalaprimeraaparicindelpatrnenelstrings.Siencuentrauna,entoncesmatchretornalacaptura
delpatrnencasocontrariodevuelvenil.Sielpatrnnoproduceningunacapturaentoncessedevuelve
lacoincidenciacompleta.Unterceryopcionalargumentonumricoinicioespecificadndecomenzarla
bsquedasuvalorpordefectoes1ypuedesernegativo.

string.rep(s,n)
Devuelveunstringqueeslaconcatenacindencopiasdelstrings.

string.reverse(s)
Devuelveunstringqueeseloriginalsinvertido.

string.sub(s,i[,j])
Retornaelsubstringdes que comienza en i y contina hasta ji y j pueden ser negativos. Si j est
ausente entonces se asume que vale 1 (equivalente a la longitud del string). En particular, la llamada
string.sub(s,1,j)retornaunprefijodesconlongitudj,ystring.sub(s, -i)retornaunsufijode
sconlongitudi.

string.upper(s)
Recibeunstringydevuelveunacopiadelmismocontodaslasletrasminsculascambiadasamaysculas.
El resto de los caracteres permanece sin cambios. La definicin de letra minscula depende del sistema
local.

5.4.1Patrones
Clasesdecaracteres:
Se usan clases de caracteres para representar conjuntos de caracteres. Estn permitidas las siguientes
combinacionesparadescribirunaclasedecaracteres:
x:(dondexnoesunodeloscaracteresmgicos^$()%.[]*+-?)representaelpropiocaracterx.
.:(unpunto)representacualquiercarcter.
%a:representacualquierletra.
%c:representacualquiercarcterdecontrol.
%d:representacualquierdgito.
%l:representacualquierletraminscula.
%p:representacualquiercarcterdepuntuacin.
%s:representacualquiercarcterdeespacio.
%u:representacualquierletramayscula.
%w:representacualquiercarcteralfanumrico.
%x:representacualquierdgitohexadecimal.
%z:representaelcarcterconvalorinterno0(cero).
%x: (donde x es cualquier carcter no alfanumrico) representa el carcter x. sta es la manera
estndar de "escapar" los caracteres mgicos. Cualquier caracter de puntuacin (incluso los no
mgicos)puedenserprecedidosporunsignodeporcentaje'%'cuandosequieranrepresentarseas
mismosenelpatrn.
[conjunto]:representalaclasequeeslaunindetodosloscaracteresenelconjunto.Unrangode
caracterespuedeserespecificadoseparandoelcarcterdelprincipioydelfinalmedianteunguin'-'.
Todaslasclasesdeltipo%xdescritasmsarribapuedensertambinutilizadascomocomponentes
https://www.lua.org/manual/5.1/es/manual.html#2.1

58/72

26/5/2016

Manual de Referencia de Lua 5.1

del conjunto. Todos los otros caracteres en el conjunto se representan a s mismos. Por ejemplo,
[%w_](o[_%w]) representa cualquier carcter alfanumrico o el subrayado, [0-7] representa un
dgitooctal,y[0-7%l%-]representaundgitooctal,unaletraminsculaoelcarcter'-'.
Lainteraccinentrelosrangosylasclasesnoestdefinida.Portanto,patronescomo[%a-z]o[a%%]carecendesignificado.
[^conjunto]: representa el complemento de conjunto, donde conjunto se interpreta como se ha
indicadomsarriba.
Para todas las clases representadas por letras simples (%a, %c, etc.) las correspondientes letras
maysculas representan la clase complementaria. Por ejemplo, %S representa cualquier carcter no
espacio.
Lasdefinicionesdeletra,espacioyotrosgruposdecaracteresdependendelsistemalocal.Enparticular,la
clase[a-z]puedenoserequivalentea%l.
Elementosdeunpatrn
Cadaelementodeunpatrnpuedeser
unaclasedecarctersimple,queequivaleacualquiercarctersimpledelaclase
unaclasedecarctersimpleseguidapor'*',queequivalea0msrepeticionesdeloscaracteresde
laclase.Estoselementosderepeticinsiempreequivaldrnalasecuenciadecaracteresmslarga
posible
unclasedecarctersimpleseguidapor'+',queequivalea1msrepeticionesdeloscaracteresde
laclase.Estoselementosderepeticinsiempreequivaldrnalasecuenciadecaracteresmslarga
posible
un clase de carcter simple seguida por '-', que tambin equivale a 0 ms repeticiones de los
caracteres de la clase.Al contrario que '*', Estos elementos de repeticin siempre equivaldrn a la
secuenciadecaracteresmscortaposible
unaclasedecarctersimpleseguidapor'?',queequivalea01aparicionesdeuncarcterdela
clase
%n,paranentre1y9esteelementoequivaleaunsubstringigualalacapturanmeron
%bxy,dondexeysondoscaracteresdiferentesesteelementoequivaleastringsquecomienzancon
x,finalizancony,estandoequilibradosxey.Estosignificaque,iniciandouncontadora0,siseleeel
stringdeizquierdaaderecha,sumando+1porcadaxqueaparezcay1porcaday,ely final es el
primero donde el contador alcanza 0. Por ejemplo, el elemento %b()equivale auna expresincon
parntesisemparejados.
Patrn
Unpatrnesunasecuenciadeelementosdepatrn.Un'^'alcomienzodeunpatrnanclalabsquedadel
patrn al comienzo del string en el que se produce la bsqueda. Un '$' al final de un patrn ancla la
bsquedadelpatrnalfinaldelstringenelqueseproducelabsqueda.Enotrasposiciones'^'y'$' no
poseenunsignificadoespecialyserepresentanasmismos.
Capturas
Un patrn puede contener subpatrones encerrados entre parntesis que describen capturas. Cuando
sucedeunacoincidenciaentreunpatrnyunstringdado,lossubstringsque concuerdancon loindicado
entreparntesisenelpatrn,sonalmacenados(capturados)parausofuturo.Lascapturassonnumeradas
deacuerdoasusparntesisizquierdos.Porejemplo,enelpatrn"(a*(.)%w(%s*))",lapartedelstring
que concuerda con "a*(.)%w(%s*)" se guarda en la primera captura (y por tanto tiene nmero 1) el
carcterqueconcuerdacon"."secapturaconelnmero2,ylapartequeconcuerdacon"%s*"tieneel
nmero3.
Comocasoespecial,lacapturavaca()retornalaposicinactualenelstring(unnmero).Porejemplo,si
seaplicaelpatrn"()aa()"alstring"flaaap",dardoscapturas:3y5.
Unpatrnnopuedecontenercaracterescero.sese%zensulugar.

https://www.lua.org/manual/5.1/es/manual.html#2.1

59/72

26/5/2016

Manual de Referencia de Lua 5.1

5.5Manejodetablas
Esta biblioteca proporciona funciones genricas para manejo de tablas. Todas estas funciones estn
definidasdentrodelatablatable.
Lamayoradelasfuncionesenlabibliotecadetablasasumequelasmismasrepresentanarraysolistas(o
sea, estn indexadas numricamente). Para estas funciones, cuando hablamos de la "longitud" de una
tablaqueremosdecirelresultadodeloperadorlongitud(#).

table.concat(tabla[,separador[,i[,j]]])
Dado una table donde todos sus elementos son strings o nmeros devuelve
tabla[i]..separador..tabla[i+1] separador..tabla[j]. El valor por defecto de
separadoreselstringvaco,elvalorpordefectodeies1yelvalorpordefectodejeslalongituddela
tabla.Siiesmayorquej,lafuncindevuelveunstringvaco.

table.insert(tabla,[posicin,]valor)
Inserta el elemento valor en la posicin dada en la tabla, desplazando hacia adelante otros
elementos para abrir hueco, si es necesario. El valor por defecto de posicin es n+1, donde n =
#tablaeslalongituddelatabla(vase2.5.5),detalmaneraquetable.insert(t,x)insertaxalfinal
delatablat.

table.maxn(tabla)
Devuelveelmayorndicenumricopositivodeunatabladadaocerosilatablanotienendicesnumricos
positivos.(Parahacersutrabajoestafuncinrealizaunbarridolinealdelatablacompleta.)

table.remove(tabla[,posicin])
Elimina de tabla el elemento situado en la posicin dada, desplazando hacia atrs otros elementos
para cerrar espacio, si es necesario. Devuelve el valor del elemento eliminado. El valor por defecto de
posicinesn,donden es la longitud de la tabla, por lo que la llamada table.remove(t) elimina el
ltimoelementodelatablat.

table.sort(tabla[,comparador])
Ordena los elementos de la tabla en un orden dado modificando la propia tabla,desdetable[1] hasta
table[n],dondeneslalongituddelatabla.Siseproporcionaelargumentocomparadorstedebeser
unafuncinquerecibedoselementosdelatablaydevuelveverdaderocuandoelprimeroesmenorqueel
segundo(porloquenot comparador(a[i+1],a[i])serverdaderodespusdelaordenacin).Sino
seproporcionaunafuncincomparadorentoncesseusaeloperadorestndar<deLua.
El algoritmo de ordenacin no es estable esto es, los elementos considerados iguales por la ordenacin
dadapuedensufrircambiosdeordenrelativosdespusdelaordenacin.

5.6Funcionesmatemticas
EstabibliotecaesunainterfacealabibliotecamatemticaestndardeC.Proporcionatodassusfunciones
dentrodelatablamath.

math.abs(x)
Devuelveelvalorabsolutodex.

math.acos(x)
Devuelveelarcocosenodex(enradianes).

math.asin(x)
https://www.lua.org/manual/5.1/es/manual.html#2.1

60/72

26/5/2016

Manual de Referencia de Lua 5.1

Devuelveelarcosenodex(enradianes).

math.atan(x)
Devuelveelarcotangentedex(enradianes).

math.atan2(y,x)
Devuelve el arco tangente de y/x (en radianes), pero usa los signos de ambos argumentos para
determinarelcuadrantedelresultado.(Tambinmanejacorrectamenteelcasoenquexescero.)

math.ceil(x)
Devuelveelmenorenteromayoroigualquex.

math.cos(x)
Devuelveelcosenodex(seasumequeestenradianes).

math.cosh(x)
Devuelveelcosenohiperblicodex.

math.deg(x)
Devuelveengradossexagesimaleselvalordex(dadoenradianes).

math.exp(x)
Devuelveelvalordeex.

math.floor(x)
Devuelveelmayorenteromenoroigualquex.

math.fmod(x,y)
Devuelveelrestodeladivisindexpory.

math.frexp(x)
Devuelvemyetalesquex=m2e,eesunenteroyelvalorabsolutodemestenelintervalo[0.5,1) (o
cerocuandoxescero).

math.huge
ElvalorHUGE_VAL,unvalormsgrandeoigualqueotrovalornumricocualquiera.

math.ldexp(m,e)
Devuelvem2e(edebeserunentero).

math.log(x)
Devuelveellogaritmonaturaldex.

math.log10(x)
Devuelveellogaritmodecimal(base10)dex.

math.max(x,)
https://www.lua.org/manual/5.1/es/manual.html#2.1

61/72

26/5/2016

Manual de Referencia de Lua 5.1

Devuelveelmayorvalordeentresusargumentos.

math.min(x,)
Devuelveelmenorvalordeentresusargumentos.

math.modf(x)
Devuelvedosnmeros,laspartesenterayfraccionaldex.

math.pi
Elvalordepi.

math.pow(x,y)
Devuelvexy.(Sepuedetambinusarlaexpresinx^yparacalcularestevalor.)

math.rad(x)
Devuelveenradianeselvalordelngulox(dadoengradossexagesimales).

math.random([m[,n]])
Estafuncinesuninterfacearand,generadorsimpledenmerospseudoaleatoriosproporcionadoporel
ANSIC.(Singarantasdesuspropiedadesestadsticas.)
Cuandoseinvocasinargumentosdevuelveunnmeropseudoaleatoriorealuniformeenelrango[0,1).
Cuando se invoca con un nmero entero m, math.random devuelve un nmero pseudoaleatorio entero
uniforme en el rango [1, m]. Cuando se invoca con dos argumentos m y n enteros, math.random
devuelveunnmeropseudoaleatorioenterouniformeenelrango[m, n].

math.randomseed(x)
Establece x como "semilla" para el generador de nmeros pseudoaleatorios: iguales semillas producen
igualessecuenciasdenmeros.

math.sin(x)
Devuelveelsenodex(seasumequeestenradianes).

math.sinh(x)
Devuelveelsenohiperblicodex.

math.sqrt(x)
Devuelvelaraizcuadradadex.(Sepuedeusartambinlaexpresinx^0.5paracalcularestevalor.)

math.tan(x)
Devuelvelatangentedex(seasumequeestenradianes).

math.tanh(x)
Devuelvelatangentehiperblicadex.

5.7Utilidadesdeentrada/salida
Labibliotecadeentrada/salida(I/Odesussiglaseningls)proporcionadosestilosdiferentesdemanejode
ficheros.Elprimerodeellosusadescriptoresdeficheroimplcitosestoes,existendosficherospordefecto,
https://www.lua.org/manual/5.1/es/manual.html#2.1

62/72

26/5/2016

Manual de Referencia de Lua 5.1

uno de entrada y otro de salida, y las operaciones se realizan sobre stos. El segundo estilo usa
descriptoresdeficheroexplcitos.
Cuandoseusandescriptoresimplcitostodaslasoperacionessoportadasestnenlatablaio.Cuandose
usan descriptores explcitos, la operacin io.open devuelve un descriptor de fichero y todas las
operacionesseproporcionancomomtodosasociadosaldescriptor.
Latablaiotambinproporcionatresdescriptoresdeficheropredefinidosconsussignificadosusualesen
C:io.stdin,io.stdouteio.stderr.Labibliotecadeentrada/salidanuncacierraesosficheros.
Anoserqueseespecifique,todaslasfuncionesdeentrada/salidadevuelven nilencasodefallo(msun
mensaje de error como segundo resultado y un cdigo de error dependiente del sistema como un tercer
resultado)yvaloresdiferentesdenilsihayxito.

io.close([descriptor_de_fichero])
Equivalenteadescriptor_de_fichero:close().Sinargumentocierraelficherodesalidapordefecto.

io.flush()
Equivalenteadescriptor_de_fichero:flushaplicadoalficherodesalidapordefecto.

io.input([descriptor_de_fichero|nombre_de_fichero])
Cuandoseinvocaconunnombredeficheroentoncesloabre(enmodotexto),yestablecesumanejadorde
ficherocomoficherodeentradapordefecto.Cuandosellamaconundescriptordeficherosimplementelo
establece como manejador para el fichero de entrada por defecto. Cuando se invoca sin argumento
devuelveelficheropordefectoactual.
Encasodeerroresestafuncinactivaerrorenlugardedevolveruncdigodeerror.

io.lines([nombre_de_fichero])
Abre el fichero de nombre dado en modo lectura y devuelve una funcin iteradora que, cada vez que es
invocada,devuelveunanuevalneadelfichero.Portanto,laconstruccin
for linea in io.lines(nombre_de_fichero) do bloque end
iterarsobretodaslaslneasdelfichero.Cuandolafunciniteradoradetectaelfinaldelficherodevuelvenil
(paraacabarelbucle)ycierraautomticamenteelfichero.
Lallamadaaio.lines()(sinnombredefichero)equivaleaio.input():lines()estoes,iterasobre
todaslaslneasdelficheropordefectodeentrada.Enesecasonocierraelficherocuandoacabaelbucle.

io.open(nombre_de_fichero[,modo])
Estafuncinabreunfichero,enelmodoespecificadoenelstringmode.Devuelveundescriptordefichero
o,encasodeerror,nilademsdeunmensajedeerror.
Elstringqueindicamodopuedeserunodelossiguientes:
"r":modolectura(pordefecto)
"w":modoescritura
"a":modoadicin
"r+":modoactualizacin,todoslosdatospreexistentessemantienen
"w+":modoactualizacin,todoslosdatospreexistentesseborran
"a+": modo adicin con actualizacin, todos los datos preexistentes se mantienen, y la escritura se
permitesloalfinaldelfichero.
Elstringqueindicaelmodopuedecontenertambin'b'alfinal,loqueesnecesarioenalgunossistemas
paraabrirelficheroenmodobinario.EstestringesexactamenteelqueseusaenlafuncinestndardeC
fopen.

https://www.lua.org/manual/5.1/es/manual.html#2.1

63/72

26/5/2016

Manual de Referencia de Lua 5.1

io.output([descriptor_de_fichero|nombre_de_fichero])
Similaraio.input,perooperandosobreelficheropordefectodesalida.

io.popen(prog[,modo])
Comienzaaejecutarelprogramaprogenunprocesoseparadoyretornaundescriptordeficheroquese
puedeusarparaleerdatosqueescribeprog(simodoes"r",elvalorpordefecto)oparaescribirdatos
queleeprog(simodoes"w").
Estafuncindependedelsistemaoperativoynoestdisponibleentodaslasplataformas.

io.read()
Equivalenteaio.input():read.

io.tmpfile()
Devuelve un descriptor de fichero para un fichero temporal. ste se abre en modo actualizacin y se
eliminaautomticamentecuandoacabaelprograma.

io.type(objeto)
Verificasiobjetoesundescriptorvlidodefichero.Devuelveelstring"file"siobjetoesundescriptor
deficheroabierto,"closed file"siobjetoesundescriptordeficherocerrado,onilsiobjetonoes
undescriptordefichero.

io.write()
Equivalenteaio.output():write.

descriptor_de_fichero:close()
Cierra el descriptor de fichero descriptor_de_fichero. Tngase en cuenta que los ficheros son
cerradosautomticamentecuandosusdescriptoresseeliminanenunciclodeliberacindememoria,pero
queestotomauntiempoimpredecibledeejecucin.

descriptor_de_fichero:flush()
Salvacualquierdatoescritoendescriptor_de_fichero.

descriptor_de_fichero:lines()
Devuelveunafunciniteradoraque,cadavezqueesinvocada,devuelveunanuevalnealedadelfichero.
Portanto,laconstruccin
for linea in descriptor_de_fichero:lines() do bloque end
iterar sobre todas las lneas del fichero. (A diferencia de io.lines, esta funcin no cierra el fichero
cuandoacabaelbucle.)

file:read()
Lee en el fichero dado por el descriptor_de_fichero, de acuerdo el formato proporcionado, el cual
especifica qu leer. Para cada formato, la funcin devuelve un string (o un nmero) con los caracteres
ledos,onilsinopudoleerlosdatosconelformatoespecificado.Cuandoseinvocasinformatoseusauno
pordefectoqueleelaprximalneacompleta(vasemsabajo).
Losformatosdisponiblesson
"*n":leeunnmerosteeselnicoformatoquedevuelveunnmeroenlugardeunstring.
"*a":leeelrestodelficherocompleto,empezandoenlaposicinactual.Alfinaldelficherodevuelve
https://www.lua.org/manual/5.1/es/manual.html#2.1

64/72

26/5/2016

Manual de Referencia de Lua 5.1

unstringvaco.
"*l": lee la prxima lnea (saltndose el final de lnea), retornando nil al final del fichero. ste es el
formatopordefecto.
unnmero:leeunstringconcomomximoestenmerodecaracteres,devolviendonilsisellegaal
finaldelfichero.Sielnmeroesceronoleenadaydevuelveunstringvaco,onil si se alcanza el
finaldelfichero.

file:seek([de_dnde][,desplazamiento])
Establece(osolicita)laposicinactual(delpunterodelectura/escritura)eneldescriptor_de_fichero,
medidadesdeelprincipiodelfichero,enlaposicindadapordesplazamientomslabaseespecificada
porelstringdnde,comoseespecificaacontinuacin:
"set":sitalaposicinbaseen0(comienzodelfichero)
"cur":sitalaposicinbaseenlaactual
"end":sitalaposicinbasealfinaldelfichero.
En caso de xito la funcin seek retorna la posicin final (del puntero de lectura/escritura) en el fichero
medidaenbytesdesdeelprincipiodelfichero.Silallamadafallaretornanil,msunstringdescribiendoel
error.
El valor por defecto de dnde es "cur", y para desplazamiento es 0. Por tanto, la llamada
descriptor_de_fichero:seek() devuelve la posicin actual, sin cambiarla la llamada
descriptor_de_fichero:seek("set")establecelaposicinalprincipiodelfichero(ydevuelve0)y
lallamadadescriptor_de_fichero:seek("end")establecelaposicinalfinaldelficheroydevuelve
sutamao.

file:setvbuf(modo[,tamao])
Estableceunmodobufferparaunficherodesalida.Elargumentomodopuedeserunodeestostres:
"no":sinbufferelresultadodecualquieroperacindesalidaseproduceinmediatamente.
"full":conbuffercompletolaoperacindesalidaserealizaslocuandoelbufferestllenoocuando
seinvocaexplcitamentelafuncinflusheneldescriptordelfichero.
"line":conbufferdelnealasalidasedemorahastaqueseproduceunanuevalneaenlasalidao
existeunaentradadealgnficheroespecial(comounaterminal).
Paralosdosltimoscasos,tamao especifica eltamao del buffer, en bytes. El valor por defecto es un
tamaoadecuado.

file:write()
Escribeelvalordesusargumentosenelficherodadoporsudescriptor_de_fichero.Losargumentos
puedenserstringsonmeros.Paraescribirotrosvaloressesetostringostring.formatantesque
write.

5.8Utilidadesdelsistemaoperativo
Estabibliotecaestimplementadaatravsdelatablaos.

os.clock()
DevuelveunaaproximacinaltotaldesegundosdeCPUusadosporelprograma.

os.date([formato[,tiempo]])
Devuelveunstringounatablaconteniendolafechayhora,formateadadeacuerdoconelstringdadoen
formato.
Si el argumento tiempo est presente entonces ese tiempo concreto es el que se formatea (vase la
funcinos.timeparaunadescripcindeestevalor).Encasocontrario,dateformateaeltiempoactual.

https://www.lua.org/manual/5.1/es/manual.html#2.1

65/72

26/5/2016

Manual de Referencia de Lua 5.1

Siformatocomienzacon'!'entonceseltiemposeformateadeacuerdoalTiempoUniversalCoordinado.
Despusdeestecarcteropcional,siformatoes*tentoncesdatedevuelveunatablaconlossiguientes
campos:year (cuatro dgitos), month(112),day(131),hour (023), min (059), sec (061), wday
(dadelasemana,eldomingoes1),yday(dadentrodelao),eisdst(booleano,verdaderosieshorario
deverano).
Siformatonoes*tentoncesdatedevuelveeltiempocomounstring,formateado deacuerdo conlas
mismasreglasquelafuncinstrftimedeC.
Cuandoseinvocasinargumentosdatedevuelveunarepresentacinrazonabledelafechaylahoraque
dependedelamquinaydelsistemalocal(estoes,os.date()equivaleaos.date("%c")).

os.difftime(t2,t1)
Devuelveelnmerodesegundosdesdeelinstantet1hastaelt2. En POSIX, Windows y algunos otros
sistemasestevaloresexactamentet2t1.

os.execute([comando])
Esta funcin equivale a la funcin system de C. Pasa la orden comando para que sea ejecutada en el
intrprete de comandos del sistema operativo. Devuelve un cdigo de estatus, que es dependiente del
sistema.Sielargumentocomandoestausentedevuelveunvalornocerosiestdisponibleunintrprete
decomandosycerosinoestdisponible.

os.exit([cdigo])
InvocalafuncinexitdeC,conuncdigoenteroopcional,paraterminarelprogramaanfitrin.Elvalor
pordefectodecdigoeselvalorcorrespondienteaxito.

os.getenv(variable)
Devuelveelvalorasignadoalavariabledeentornovariable,onilsilavariablenoestdefinida.

os.remove(nombre_de_fichero)
Elimina el fichero o directorio dado. Los directorios deben estar vacos para poder ser eliminados. Si la
funcinfallaretornanil,msunstringdescribiendoelerror.

os.rename(nombre_viejo,nombre_nuevo)
Renombraunficheroodirectoriodenombre_viejoanombre_nuevo.Silafuncinfallaretornanil,ms
unstringdescribiendoelerror.

os.setlocale(local[,categora])
Establece valores en el sistema local del programa. local es un string que especifica un valor local
categora es un string opcional que describe qu categora cambiar: "all", "collate", "ctype",
"monetary","numeric",or"time"lacategorapordefectoes"all".Estafuncinretornaelnombre
delnuevolocalonilsilapeticinnopudoseraceptada.
Si local es el string vaco, el local actual se establece como el local nativo (que depende de la
implementacin).Silocaleselstring"C",ellocalactualseestableceenellocalestndardeC.
Cuandoseinvocaconnilcomoprimerargumento,estafuncinretornasloelnombredellocalactualenla
categoradada.

os.time([tabla])
Devuelve el tiempo actual cuando se llama sin argumentos, o un tiempo representando la fecha y hora
especificadasenlatabladada.stadebetenerloscamposyear,monthyday,ypuedetenerloscampos
hour,min,seceisdst(paraunadescripcindeesoscampos,vaselafuncinos.date).

https://www.lua.org/manual/5.1/es/manual.html#2.1

66/72

26/5/2016

Manual de Referencia de Lua 5.1

El valor retornado es un nmero, cuyo significado depende del sistema. En POSIX, Windows y algunos
otrossistemasestenmerocuentaelnmerodesegundosdesdealgunafechainicialdada(la"poca").En
otrossistemaselsignificadonoestespecificado,yelnmeroretornadoportimepuedeserusadoslo
comoargumentodelasfuncionesdateydifftime.

os.tmpname()
Devuelveunstringconunnombredeficheroquepuedeserusadocomoficherotemporal.Elficherodebe
serabiertoexplcitamenteantesdesuusoytambineliminadoexplcitamentecuandonosenecesitems.

5.9Labibliotecadedepuracin
EstabibliotecaproporcionaalosprogramasenLualasfuncionalidadesdelainterfacededepuracin.Se
debe usar con cuidado. Las funciones proporcionadas aqu deben ser usadas exclusivamente para
depuracinylaboressimilares,talescomoelanlisisdecdigo.Porfavor,resstaselatentacindeusarla
bibliotecacomounaherramientadeprogramacin:puedellegarasermuylenta.Adems,algunadesus
funcionesviolaalgunadelasasuncionesacercadelcdigoenLua(porejemplo,quelasvariableslocales
de una funcin no pueden ser accedidas desde fuera de la funcin o que los userdata no pueden ser
cambiadosdesdeelcdigoLua)yportantopuedencomprometercdigodeotramaneraseguro.
Todaslasfuncionesdeestabibliotecaseproporcionanenlatabladebug.

debug.debug()
Entra en modo interactivo con el usuario, ejecutando cada string que introduce el usuario. Usando
comandos simples y otras utilidades de depuracin el usuario puede inspeccionar variables globales y
locales,cambiarsusvalores,evaluarexpresiones,etc.Unalneaquecontieneslolapalabracontfinaliza
estafuncin,porloqueelprogramainvocantecontinasuejecucin.
Tngase presente que los comandos para degub.debug no estn lxicamente anidados dentro de
ningunafuncin,ynotienenaccesodirectoalasvariableslocales.

debug.getfenv(o)
Devuelveelentornodelobjetoo.

debug.gethook([proceso])
Devuelveinformacinsobreelhookactualdelproceso,enformadetresvalores:lafuncindelhookactual,
la mscara del hook actual y el contador del hook actual (como fue establecida por la funcin
debug.sethook).

debug.getinfo([proceso,]func[,qu])
Devuelveunatablaconinformacinacercadelafuncinfunc.Sepuededarlafuncindirectamente,ose
puededarunnmeroenellugardefunc,loquesignificalafuncinalniveldeejecucindelallamadade
pila:nivel0eseldelafuncinactual(getinfomisma)nivel1eslafuncinquellamagetinfoyas
sucesivamente.Sifuncesunnmeromayorqueeltotaldefuncionesactivasentoncesgetinforetorna
nil.
Latabladevueltacontienetodosloscamposretornadosporlua_getinfo,conelstringqudescribiendo
loscamposarellenar.Pordefecto,sinoseproporcionaqu,seobtienetodalainformacindisponible.Si
estpresente,laopcin'f'aadeuncampodenominadofuncconlafuncinmisma.Siestpresente,la
opcin'L'aadeuncampodenominadoactivelinesconlatabladelneasvlidas.
Por ejemplo, la expresin debug.getinfo(1,"n").nombre retorna una tabla con un nombre para la
funcinactual,sipudoencontrarunnombrerazonable,ydebug.getinfo(print)retornaunatablacon
todalainformacindisponiblesobrelafuncinprint.

debug.getlocal([proceso,]nivel,local)
Estafuncindevuelveelnombreyelvalordeunavariablelocalconndicelocaldelafuncinalnivel
https://www.lua.org/manual/5.1/es/manual.html#2.1

67/72

26/5/2016

Manual de Referencia de Lua 5.1

dadodelapila.(Elprimerargumentoovariablelocaltienendice1,yassucesivamente,hastalaltima
variablelocalactiva.)Lafuncinretornanilsinoexisteunavariablelocalconelndicedado,yactivaun
errorcuandoseinvocaconnivelfueraderango.(Sepuedellamaradebug.getinfoparaverificarsiel
nivelesvlido.)
Los nombres de variable que comienzan con '(' (parntesis de abrir) representan variables internas (de
controldebucles,temporalesylocalesdefuncionesC).

debug.getmetatable(objeto)
Devuelvelametatabladelobjetodadoonilsistenotienemetatabla.

debug.getregistry()
Retornalatabladeregistro(vase3.5).

debug.getupvalue(func,up)
Estafuncinretornaelnombreyelvalordelupvalueconndiceupdelafuncinfunc.Lafuncinretorna
nilsinohayunupvalueconelndicedado.

debug.setfenv(objeto,tabla)
Establecelatabladeentornodeunobjetodado.

debug.sethook([proceso,]func_hook,mscara[,contador])
Establecelafuncinfunc_hookcomohook.Elstringdadoenmscarayelnmerocontadordescriben
comoseinvocaalhook.Lamscarapuedetenerlossiguientescaracteres,conelsignificadoindicado:
"c":ElhookseinvocacadavezqueLuallamaaunafuncin
"r":ElhookseinvocacadavezqueLuaretornadeunafuncin
"l":ElhookseinvocacadavezqueLuaentraenunanuevalneadecdigo.
Conuncontadordiferentedeceroelhookseinvocacadaesenmerodeinstrucciones.
Cuandoseinvocasinargumentosdebug.sethookdesactivaelhook.
Cuando se invoca el hook su primer argumento es un string describiendo el evento que ha activado su
invocacin:"call","return"(o"tail return"),"line" y "count". Para los eventos de lnea, el
hook tambin devuelve el nmero de lnea como segundo valor. Dentro de un hook se puede invocar a
getinfoconnivel2paraobtenermsinformacinacercadelafuncinenejecucin(nivel0eslafuncin
getinfoynivel1eslafuncinhook),anoserqueeleventosea"tail return".EnesecasoLuaslo
simulaelretorno,yunallamadaagetinfodevolverdatosinvlidos.

debug.setlocal([proceso,]nivel,local,valor)
Estafuncinasignaelvaloralavariablelocalconndicelocaldelafuncinalniveldadoenlapila,
retornandoelnombredelavariablelocal.Lafuncinretornanilsinoexisteunavariablelocalconelndice
dado,yactivaunerrorcuandosellamaconunnivelfueraderango.(Sepuedeinvocargetinfopara
verificarsielnivelesvlido.)

debug.setmetatable(objeto,tabla)
Establecetabla(quepuedesernil)comolametatabladelobjetodado.

debug.setupvalue(func,up,valor)
Esta funcin asigna el valor al upvalue con ndice up de la funcin func, retornando el nombre del
upvalue.Lafuncinretornanilsinoexisteelupvalueconelndicedado.

debug.traceback([proceso,][mensaje][,nivel])
https://www.lua.org/manual/5.1/es/manual.html#2.1

68/72

26/5/2016

Manual de Referencia de Lua 5.1

Devuelve un string con el "trazado inverso" de la llamada en la pila. Un mensaje opcional se aade al
principiodel"trazadoinverso".Unnmerodenivelopcionalindicaenqunivelsecomienzael"trazado
inverso"(pordefectoes1,lafuncinqueestinvocandoatraceback).

6Luacomolenguajeindependiente
Aunque Lua ha sido diseado como un lenguaje de extensin, para ser embebido en programas en C,
tambin es frecuentemente usado como lenguaje independiente. Con la distribucin estndar se
proporciona un intrprete independiente denominado simplemente lua.ste incluyetodas lasbibliotecas
estndar,incluyendoladedepuracin.Seusaas:
lua [opciones] [fichero_de_script [argumentos]]
Lasopcionesson:
-esentencia:ejecutaelstringsentencia
-lmdulo:cargamduloconlafuncinrequire
-i:entraenmodointeractivodespusdeejecutarelfichero_de_script
-v:imprimeinformacindelaversin
--:dejadeprocesaropcionesenelrestodelalnea
-:tomastdincomoficheroparaejecutarynoprocesamsopciones.
Despusdegestionarlasopcionesproporcionadas,luaejecutaelfichero_de_script dado, pasndole los
argumentos dados como strings. Cuando se invoca sin argumentos lua se comporta como lua -v -i
cuandolaentradaestndar(stdin)esunaterminal,ycomolua -enotrocaso.
Antes de ejecutar cualquier argumento el intrprete comprueba si existe una variable de entorno
LUA_INIT. Si su formato es @nombre_de_fichero entonces lua ejecuta este fichero. En otro caso lua
ejecutaelpropiostring.
Todaslasopcionesseprocesanenorden,excepto-i.Porejemplo,unainvocacincomo
$ lua -e'b=1' -e 'print(b)' script.lua
primeroestablecerelvalordeba1,luegoimprimirelvalordeb(quees'1'), y finalmente ejectuar el
fichero script.lua sin argumentos. (Aqu $ es el prompt del intrprete de comandos del sistema
operativo.Eldecadasistemaconcretopuedeserdiferente.)
Antes de comenzar a ejecutar fichero_de_script lua recolecta todos los argumentos de la lnea de
comandosenunatablaglobaldenominadaarg.Elnombredelfichero_de_scriptseguardaenelndice0,
el primer argumento depus del nombre del programa se guarda en el ndice 1, y as sucesivamente.
Cualesquiera argumentos antes del nombre del programa (esto es, el nombre del intrprete ms las
opciones)vanalosndicesnegativos.Porejemplo,enlainvocacin
$ lua -la b.lua t1 t2
elintrpreteprimeroejecutaelficherob.lua,luegocrealatabla
arg = { [-2] = "lua", [-1] = "-la",
[0] = "b.lua",
[1] = "t1", [2] = "t2" }
yfinalmenteejecutaelficherob.lua.steseinvocaconarg[1],arg[2],comoargumentostambin
seaccedeaestosargumentosconlaexpresinvararg'...'.
Enmodointeractivosiseescribeunasentenciaincompletaelintrpreteesperaparaqueseacompletada,
indicndoloconotropromptdiferente.
Silavariableglobal_PROMPTcontieneunstringentoncessuvalorseusacomoprompt.Demanerasimilar,
silavariableglobal_PROMPT2contieneunstringsuvalorseusacomopromptsecundario(elqueseutiliza
durantelassentenciasincompletas).Portanto,ambospromptspuedensercambiadosdirectamenteenla
lnea de comandos o en cualquier programa en Lua asignando un valor a _PROMPT. Vase el siguiente
ejemplo:
https://www.lua.org/manual/5.1/es/manual.html#2.1

69/72

26/5/2016

Manual de Referencia de Lua 5.1

$ lua -e"_PROMPT='myprompt> '" -i


(laparejaexternadecomillasesparaelintrpretedecomandosdelsistemaoperativolainternaparaLua).
Nteseelusode-iparaentrarenmodointeractivoenotrocasoelprogramaacabarasilenciosamente
justodespusdelaasignacina_PROMPT.
ParapermitirelusodeLuacomounintrpretedescriptsenlossistemasUnix,elintrpreteindependiente
de Lua se salta la primera lnea de un chunk si sta comienza con #. Por tanto, los programas de Lua
puedenconvertirseenejecutablesusandochmod +xylaforma#!,comoen
#!/usr/local/bin/lua
(Porsupuesto,lalocalizacindelintrpretedeLuapuedeserdiferenteencadamquina.Siluaestenel
caminodebsquedadeejecutables,PATH,entonces
#!/usr/bin/env lua
esunasolucinmsportable.)

7Incompatibilidadesconlaversinanterior
AquselistanlasincompatibilidadesquepuedenaparecercuandoseportaunprogramadeLua5.0aLua
5.1. Se pueden evitar la mayora de ellas compilando Lua con las opciones apropiadas (vase el fichero
luaconf.h).Sinembargotodasesasopcionesdecompatibilidadserneliminadasenlasiguienteversin
deLua.

7.1Cambiosenellenguaje
El sistema de gestin de funciones con un nmero de argumentos variable cambi desde el
pseudoargumentoargconunatablaconargumentosextraalaexpresinvararg.(Vaselaopcinde
compilacinLUA_COMPAT_VARARGenluaconf.h.)
Existeunsutilcambioenelmbitodelasvariablesimplcitasdelassentenciasforyrepeat.
La sintaxis [[...]] para string largo y para comentario largo no permite anidamientos. Se puede
usar la nueva sintaxis [=[...]=] en esos casos. (Vase la opcin de compilacin
LUA_COMPAT_LSTRenluaconf.h.)

7.2Cambiosenlasbibliotecas
Lafuncinstring.gfindhasidorenombradaastring.gmatch.(Vaselaopcindecompilacin
LUA_COMPAT_GFINDenluaconf.h.)
Cuando se invoca string.gsub con una funcin como su tercer argumento, siempre que esta
funcindevuelvanilofalseelstringdereemplazamientoeslacoincidenciacompletaenlugardeun
stringvaco.
Se desaconseja el uso de la funcin table.setn. La funcin table.getn corresponde al nuevo
operadordelongitud(#)seseeloperadorenlugardelafuncin.(Vaselaopcindecompilacin
LUA_COMPAT_GETNenluaconf.h.)
La funcin loadlib ha sido renombrada a package.loadlib. (Vase la opcin de compilacin
LUA_COMPAT_LOADLIBenluaconf.h.)
La funcin math.mod ha sido renombrada a math.fmod. (Vase la opcin de compilacin
LUA_COMPAT_MODenluaconf.h.)
Sedesaconsejaelusodelasfuncionestable.foreachytable.foreachi.Ensulugarsepuede
usarunbucleconpairsoipairs.
Haycambiossustancialesenlafuncinrequiredebidoalnuevosistemademdulos.Noobstante,
el nuevo comportamiento es casi totalmente compatible con el viejo, aunque require obtiene el
caminodebsquedadepackage.pathenlugardeLUA_PATH.
Lafuncincollectgarbagetieneotrosargumentos.Sedesaconsejaelusodelafuncingcinfo
sesecollectgarbage("count")ensulugar.

7.3CambiosenlaAPI
https://www.lua.org/manual/5.1/es/manual.html#2.1

70/72

26/5/2016

Manual de Referencia de Lua 5.1

Las funciones luaopen_* (para abrir bibliotecas) no pueden ser invocadas directamente como
funcionesCregulares.DebenserllamadasatravsdeLua,comootrafuncinLua.
La funcin lua_open ha sido reemplazada por lua_newstate para permitir al usuario establecer
una funcin de asignacin de memoria. Se puede usar luaL_newstate de la biblioteca estndar
paracrearunestadoconlafuncinestndardeasignacindememoria(basadaenrealloc).
Las funciones luaL_getn y luaL_setn (de la biblioteca auxiliar) no deben usarse. sese
lua_objlenenlugardeluaL_getnynadaenlugardeluaL_setn.
LafuncinluaL_openlibhasidoreemplazadaporluaL_register.
LafuncinluaL_checkudata ahora provoca un error cuando el valor dado no es un userdata del
tipoesperado.(EnLua5.0retornabaNULL.)

8LasintaxiscompletadeLua
AquaparecelasintaxiscompletadeLuaenlanotacinBNFextendida.Nodescribelasprioridadesdelos
operadores.
chunk ::= {sentencia [';']} [ltima_sentencia[';']]
bloque ::= chunk
sentencia ::= varlist '=' explist |
llamada_a_func |
do bloque end |
while exp do bloque end |
repeat bloque until exp |
if exp then bloque {elseif exp then bloque} [else bloque] end |
for nombre '=' exp ',' exp [',' exp] do bloque end |
for lista_de_nombres in explist do bloque end |
function nombre_de_func cuerpo_de_func |
local function nombre cuerpo_de_func |
local lista_de_nombres ['=' explist]
ltima_sentencia ::= return [explist] | break
nombre_de_func ::= nombre {'.' nombre} [':' nombre]
varlist ::= var {',' var}
var ::= nombre | prefixexp '[' exp ']' | prefixexp '.' nombre
lista_de_nombres ::= nombre {',' nombre}
explist ::= {exp ','} exp
exp ::= nil | false | true | nmero | string | '...' |
func | prefixexp | constructor_de_tabla |
exp operador_binario exp | operador_unario exp
prefixexp ::= var | llamada_a_func | '(' exp ')'
llamada_a_func ::= prefixexp arg_actuales | prefixexp ':' nombre args_actuales
args_actuales ::= '(' [explist] ')' | constructor_de_tabla | string
func ::= function cuerpo_de_func
cuerpo_de_func ::= '(' [args_formal_list] ')' bloque end
args_formal_list ::= lista_de_nombres [',' '...'] | '...'
https://www.lua.org/manual/5.1/es/manual.html#2.1

71/72

26/5/2016

Manual de Referencia de Lua 5.1

constructor_de_tabla ::= '{' [lista_de_campos] '}'


lista_de_campos ::= campo {separador_de_campo campo} [separador_de_campo]
campo ::= '[' exp ']' '=' exp | nombre '=' exp | exp
separador_de_campo ::= ',' | ';'
operador_binario ::= '+' | '-' | '*' | '/' | '^' | '%' |
'..' | '<' | '<=' | '>' | '>=' | '==' |
'~=' | and | or
operador_unario ::= '-' | not | '#'

Notassobrelatraduccin
He intentado ser lo ms fiel posible al original probablemente hay errores y erratas en caso de duda
conslteseeloriginaleningls.
Algunaspalabrassondeusotancomneninformticaqueseutilizanenespaolsintraducir.Otrastienen
portraduccinunaoracincompletayportantoserabastantepococoherenteintroduciresafraseencada
lugar.Hepreferido,portanto,dejarlaseneltexto(indicadasenitlicacomoescostumbreenespaolcon
palabrasdeotrosidiomas),exponiendoaqulatraduccin.
arrays:vectores,matrices,etc.unconjuntodedatosidentificadoporunnombre(queseledaatodo
el conjunto) los arrays se pueden indexar mediante nmeros enteros o mediante cualquier tipo de
dato(enestecasosehabladearraysasociativos).
buffer:sepuedetraducirpor"tampn"(aunqueelnombreeninglsesmuyutilizado)esunespacio
auxiliardememoriaparadiversasoperaciones.
chunk:unidaddeejecucinenLua,queessimplementeunasecuenciadesentencias.
hook:enLuasedenominaasaunafuncinenlasombraqueseactivaalocurrirciertoseventosen
elcdigo(porejemplounretornodeunafuncin)seusaenladepuracindelcdigo.
prompt:unindicadordequeelintrpretedecomandosdelsistemaoperativoestesperandoporuna
entradadelusuario.
script: normalmente se denominan as a los programas que se interpretan (por oposicin a los
ejecutablescompilados).
string:unatiraosecuenciadecaracteres.
upvalue:unavariablenolocal,externaaunafuncin(alaquestatieneacceso).
userdata:enLuaesunespaciodememoriautilizadoporfuncionesC.
Algunasotraspalabrashantenidolatraduccinsiguiente:
closure:instancia(defuncin).
loop:bucle.
statement:sentencia.
thread:proceso.
Lastupdate:WedSep2801:06:07BRT2011

https://www.lua.org/manual/5.1/es/manual.html#2.1

72/72

Вам также может понравиться