Bibliotecas Estandar de Lua
Bibliotecas Estandar de Lua
Sección titulada «Bibliotecas Estandar de Lua»Bibliotecas principales de Lua disponibles automaticamente en todos los procesos de Wippy. No se necesita require().
Funciones Globales
Sección titulada «Funciones Globales»Tipo y Conversion
Sección titulada «Tipo y Conversion»type(value) -- Devuelve: "nil", "number", "string", "boolean", "table", "function", "thread", "userdata"tonumber(s [,base]) -- Convertir a número, base opcional (2-36)tostring(value) -- Convertir a string, llama metametodo __tostringAserciones y Errores
Sección titulada «Aserciones y Errores»assert(v [,msg]) -- Genera error si v es false/nil, devuelve v de lo contrarioerror(msg [,level]) -- Genera error en el nivel de pila especificado (por defecto 1)pcall(fn, ...) -- Llamada protegida, devuelve ok, resultado_o_errorxpcall(fn, errh) -- Llamada protegida con función manejadora de errorIteracion de Tablas
Sección titulada «Iteracion de Tablas»pairs(t) -- Iterar todos los pares clave-valoripairs(t) -- Iterar porcion de array (1, 2, 3, ...)next(t [,index]) -- Obtener siguiente par clave-valor despues de indexMetatablas
Sección titulada «Metatablas»getmetatable(obj) -- Obtener metatabla (o campo __metatable si protegido)setmetatable(t, mt) -- Establecer metatabla, devuelve tAcceso Directo a Tablas
Sección titulada «Acceso Directo a Tablas»Omitir metametodos para acceso directo a tablas:
rawget(t, k) -- Obtener t[k] sin __indexrawset(t, k, v) -- Establecer t[k]=v sin __newindexrawequal(a, b) -- Comparar sin __eqUtilidades
Sección titulada «Utilidades»select(index, ...) -- Devuelve args desde index en adelanteselect("#", ...) -- Devuelve número de argsunpack(t [,i [,j]]) -- Devuelve t[i] hasta t[j] como multiples valoresprint(...) -- Imprimir valores (usa logging estructurado en Wippy)Variables Globales
Sección titulada «Variables Globales»_G -- La tabla de entorno global_VERSION -- Cadena de versión de LuaManipulacion de Tablas
Sección titulada «Manipulacion de Tablas»Funciones para modificar tablas:
table.insert(t, [pos,] value) -- Insertar valor en pos (por defecto: final)table.remove(t [,pos]) -- Remover y devolver elemento en pos (por defecto: ultimo)table.concat(t [,sep [,i [,j]]]) -- Concatenar elementos de array con separadortable.sort(t [,comp]) -- Ordenar in place, comp(a,b) devuelve true si a < btable.pack(...) -- Empacar varargs en tabla con campo 'n'table.unpack(t [,i [,j]]) -- Desempacar elementos de tabla como multiples valoreslocal items = {"a", "b", "c"}
table.insert(items, "d") -- {"a", "b", "c", "d"}table.insert(items, 2, "x") -- {"a", "x", "b", "c", "d"}table.remove(items, 2) -- {"a", "b", "c", "d"}, devuelve "x"
local csv = table.concat(items, ",") -- "a,b,c,d"
table.sort(items, function(a, b) return a > b -- Orden descendenteend)Operaciones de String
Sección titulada «Operaciones de String»Funciones de manipulacion de strings. También disponibles como metodos en valores string:
Coincidencia de Patrones
Sección titulada «Coincidencia de Patrones»string.find(s, pattern [,init [,plain]]) -- Encontrar patrón, devuelve inicio, fin, capturasstring.match(s, pattern [,init]) -- Extraer subcadena coincidentestring.gmatch(s, pattern) -- Iterador sobre todas las coincidenciasstring.gsub(s, pattern, repl [,n]) -- Reemplazar coincidencias, devuelve string, conteoConversion de Mayusculas
Sección titulada «Conversion de Mayusculas»string.upper(s) -- Convertir a mayusculasstring.lower(s) -- Convertir a minusculasSubcadenas y Caracteres
Sección titulada «Subcadenas y Caracteres»string.sub(s, i [,j]) -- Subcadena de i a j (indices negativos desde el final)string.len(s) -- Longitud de string (o usar #s)string.byte(s [,i [,j]]) -- Codigos numericos de caracteresstring.char(...) -- Crear string desde codigos de caracterstring.rep(s, n [,sep]) -- Repetir string n veces con separadorstring.reverse(s) -- Invertir stringFormateo
Sección titulada «Formateo»string.format(fmt, ...) -- Formateo estilo printfEspecificadores de formato: %d (entero), %f (flotante), %s (string), %q (citado), %x (hex), %o (octal), %e (cientifico), %% (% literal)
local s = "Hello, World!"
-- Coincidencia de patroneslocal start, stop = string.find(s, "World") -- 8, 12local word = string.match(s, "%w+") -- "Hello"
-- Sustitucionlocal new = string.gsub(s, "World", "Wippy") -- "Hello, Wippy!"
-- Sintaxis de métodolocal upper = s:upper() -- "HELLO, WORLD!"local part = s:sub(1, 5) -- "Hello"Patrones
Sección titulada «Patrones»| Patrón | Coincide |
|---|---|
. | Cualquier caracter |
%a | Letras |
%d | Digitos |
%w | Alfanumerico |
%s | Espacio en blanco |
%p | Puntuacion |
%c | Caracteres de control |
%x | Digitos hexadecimales |
%z | Cero (nulo) |
[set] | Clase de caracteres |
[^set] | Clase negada |
* | 0 o mas (avido) |
+ | 1 o mas (avido) |
- | 0 o mas (perezoso) |
? | 0 o 1 |
^ | Inicio de string |
$ | Fin de string |
%b() | Par balanceado |
(...) | Grupo de captura |
Las versiones mayusculas (%A, %D, etc.) coinciden con el complemento.
Funciones Matematicas
Sección titulada «Funciones Matematicas»Funciones y constantes matematicas:
Constantes {id=“math-constants”}
Sección titulada «Constantes {id=“math-constants”}»math.pi -- 3.14159...math.huge -- Infinitomath.mininteger -- Entero minimomath.maxinteger -- Entero maximoOperaciones Basicas
Sección titulada «Operaciones Basicas»math.abs(x) -- Valor absolutomath.min(...) -- Minimo de argumentosmath.max(...) -- Maximo de argumentosmath.floor(x) -- Redondear hacia abajomath.ceil(x) -- Redondear hacia arribamath.modf(x) -- Partes entera y fraccionalmath.fmod(x, y) -- Resto de punto flotantePotencias y Raices
Sección titulada «Potencias y Raices»math.sqrt(x) -- Raiz cuadradamath.pow(x, y) -- x^y (o usar operador x^y)math.exp(x) -- e^xmath.log(x [,base]) -- Log natural (o log base n)Trigonometria
Sección titulada «Trigonometria»math.sin(x) math.cos(x) math.tan(x) -- Radianesmath.asin(x) math.acos(x) math.atan(y [,x])math.sinh(x) math.cosh(x) math.tanh(x) -- Hiperbolicasmath.deg(r) -- Radianes a gradosmath.rad(d) -- Grados a radianesNumeros Aleatorios
Sección titulada «Numeros Aleatorios»math.random() -- Flotante aleatorio [0,1)math.random(n) -- Entero aleatorio [1,n]math.random(m, n) -- Entero aleatorio [m,n]math.randomseed(x) -- Establecer semilla aleatoriaConversion de Tipo
Sección titulada «Conversion de Tipo»math.tointeger(x) -- Convertir a entero o nilmath.type(x) -- "integer", "float", o nilmath.ult(m, n) -- Comparacion menor-que sin signoCorrutinas
Sección titulada «Corrutinas»Creacion y control de corrutinas. Consulte Canales y Corrutinas para canales y patrones concurrentes:
coroutine.create(fn) -- Crear corrutina desde funcióncoroutine.resume(co, ...) -- Iniciar/continuar corrutinacoroutine.yield(...) -- Suspender corrutina, devolver valores a resumecoroutine.status(co) -- "running", "suspended", "normal", "dead"coroutine.running() -- Corrutina actual (nil si hilo principal)coroutine.wrap(fn) -- Crear corrutina como función invocableCrear Corrutinas Concurrentes
Sección titulada «Crear Corrutinas Concurrentes»Crear una corrutina concurrente que se ejecuta independientemente (específico de Wippy):
coroutine.spawn(fn) -- Crear función como corrutina concurrente-- Crear tarea en segundo planocoroutine.spawn(function() while true do check_health() time.sleep("30s") endend)
-- Continuar ejecución principal inmediatamenteprocess_request()Manejo de Errores
Sección titulada «Manejo de Errores»Creacion y clasificacion de errores estructurados. Consulte Manejo de Errores para documentacion completa:
Constantes {id=“error-constants”}
Sección titulada «Constantes {id=“error-constants”}»errors.UNKNOWN -- Error no clasificadoerrors.INVALID -- Argumento o entrada invalidaerrors.NOT_FOUND -- Recurso no encontradoerrors.ALREADY_EXISTS -- Recurso ya existeerrors.PERMISSION_DENIED -- Permiso denegadoerrors.TIMEOUT -- Operación agoto tiempoerrors.CANCELED -- Operación canceladaerrors.UNAVAILABLE -- Servicio no disponibleerrors.INTERNAL -- Error internoerrors.CONFLICT -- Conflicto (ej., modificacion concurrente)errors.RATE_LIMITED -- Limite de tasa excedidoFunciones {id=“error-functions”}
Sección titulada «Funciones {id=“error-functions”}»-- Crear error desde stringlocal err = errors.new("something went wrong")
-- Crear error con metadatoslocal err = errors.new({ message = "User not found", kind = errors.NOT_FOUND, retryable = false, details = {user_id = 123}})
-- Envolver error existente con contextolocal wrapped = errors.wrap(err, "failed to load profile")
-- Verificar tipo de errorif errors.is(err, errors.NOT_FOUND) then -- manejar no encontradoend
-- Obtener pila de llamadas del errorlocal stack = errors.call_stack(err)Metodos de Error
Sección titulada «Metodos de Error»err:message() -- Obtener mensaje de error como stringerr:kind() -- Obtener tipo de error (ej., "NOT_FOUND")err:retryable() -- true, false, o nil (desconocido)err:details() -- Obtener tabla de detalles o nilerr:stack() -- Obtener traza de pila como stringUnicode UTF-8
Sección titulada «Unicode UTF-8»Manejo de strings Unicode UTF-8:
Constantes {id=“utf8-constants”}
Sección titulada «Constantes {id=“utf8-constants”}»utf8.charpattern -- Patrón que coincide con un solo caracter UTF-8Funciones {id=“utf8-functions”}
Sección titulada «Funciones {id=“utf8-functions”}»utf8.char(...) -- Crear string desde codepoints Unicodeutf8.codes(s) -- Iterador sobre codepoints: for pos, code in utf8.codes(s)utf8.codepoint(s [,i [,j]]) -- Obtener codepoints en posiciones i a jutf8.len(s [,i [,j]]) -- Contar caracteres UTF-8 (no bytes)utf8.offset(s, n [,i]) -- Posicion de byte del n-esimo caracter desde posicion ilocal s = "Hello, 世界"
-- Contar caracteres (no bytes)print(utf8.len(s)) -- 9
-- Iterar sobre codepointsfor pos, code in utf8.codes(s) do print(pos, code, utf8.char(code))end
-- Obtener codepoint en posicionlocal code = utf8.codepoint(s, 8) -- Primer caracter chino
-- Crear string desde codepointslocal emoji = utf8.char(0x1F600) -- Cara sonrienteCaracteristicas Restringidas
Sección titulada «Caracteristicas Restringidas»Las siguientes caracteristicas estandar de Lua NO estan disponibles por seguridad:
| Caracteristica | Alternativa |
|---|---|
load, loadstring, loadfile, dofile | Usar módulo Evaluacion Dinamica |
collectgarbage | GC automatico |
rawlen | Usar operador # |
io.* | Usar módulo Sistema de Archivos |
os.execute, os.exit, os.remove, os.rename, os.tmpname | Usar modulos Ejecución de Comandos, Entorno |
debug.* (excepto traceback) | No disponible |
package.loadlib | Bibliotecas nativas no soportadas |
Vea También
Sección titulada «Vea También»- Canales y Corrutinas - Canales estilo Go para concurrencia
- Manejo de Errores - Crear y manejar errores estructurados
- OS Time - Funciones de tiempo del sistema