Bibliotecas Lua Padrão
Bibliotecas Lua Padrão
Seção intitulada “Bibliotecas Lua Padrão”Bibliotecas Lua centrais automaticamente disponíveis em todos os processos Wippy. Nenhum require() necessário.
Funções Globais
Seção intitulada “Funções Globais”Tipo e Conversão
Seção intitulada “Tipo e Conversão”type(value) -- Retorna: "nil", "number", "string", "boolean", "table", "function", "thread", "userdata"tonumber(s [,base]) -- Converter para número, base opcional (2-36)tostring(value) -- Converter para string, chama metamétodo __tostringAssertions e Erros
Seção intitulada “Assertions e Erros”assert(v [,msg]) -- Lança erro se v for false/nil, retorna v caso contrárioerror(msg [,level]) -- Lança erro no nível de stack específicado (padrão 1)pcall(fn, ...) -- Chamada protegida, retorna ok, resultado_ou_erroxpcall(fn, errh) -- Chamada protegida com função handler de erroIteração de Tabela
Seção intitulada “Iteração de Tabela”pairs(t) -- Iterar todos os pares chave-valoripairs(t) -- Iterar porção array (1, 2, 3, ...)next(t [,index]) -- Obter próximo par chave-valor após indexMetatables
Seção intitulada “Metatables”getmetatable(obj) -- Obter metatable (ou campo __metatable se protegido)setmetatable(t, mt) -- Definir metatable, retorna tAcesso Raw a Tabela
Seção intitulada “Acesso Raw a Tabela”Bypass de metamethods para acesso direto a tabela:
rawget(t, k) -- Obter t[k] sem __indexrawset(t, k, v) -- Definir t[k]=v sem __newindexrawequal(a, b) -- Comparar sem __eqUtilitários
Seção intitulada “Utilitários”select(index, ...) -- Retornar args a partir do indexselect("#", ...) -- Retornar número de argsunpack(t [,i [,j]]) -- Retornar t[i] até t[j] como múltiplos valoresprint(...) -- Imprimir valores (usa logging estruturado no Wippy)Variáveis Globais
Seção intitulada “Variáveis Globais”_G -- A tabela de ambiente global_VERSION -- String da versão LuaManipulação de Tabela
Seção intitulada “Manipulação de Tabela”Funções para modificar tabelas:
table.insert(t, [pos,] value) -- Inserir valor em pos (padrão: fim)table.remove(t [,pos]) -- Remover e retornar elemento em pos (padrão: último)table.concat(t [,sep [,i [,j]]]) -- Concatenar elementos array com separadortable.sort(t [,comp]) -- Ordenar in place, comp(a,b) retorna true se a < btable.pack(...) -- Empacotar varargs em tabela com campo 'n'table.unpack(t [,i [,j]]) -- Desempacotar elementos de tabela como múltiplos 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"}, retorna "x"
local csv = table.concat(items, ",") -- "a,b,c,d"
table.sort(items, function(a, b) return a > b -- Ordem decrescenteend)Operações de String
Seção intitulada “Operações de String”Funções de manipulação de string. Também disponíveis como métodos em valores string:
Pattern Matching
Seção intitulada “Pattern Matching”string.find(s, pattern [,init [,plain]]) -- Encontrar pattern, retorna início, fim, capturasstring.match(s, pattern [,init]) -- Extrair substring correspondentestring.gmatch(s, pattern) -- Iterador sobre todas as correspondênciasstring.gsub(s, pattern, repl [,n]) -- Substituir correspondências, retorna string, contagemConversão de Caso
Seção intitulada “Conversão de Caso”string.upper(s) -- Converter para maiúsculasstring.lower(s) -- Converter para minúsculasSubstrings e Caracteres
Seção intitulada “Substrings e Caracteres”string.sub(s, i [,j]) -- Substring de i até j (índices negativos do fim)string.len(s) -- Tamanho da string (ou use #s)string.byte(s [,i [,j]]) -- Códigos numéricos de caracteresstring.char(...) -- Criar string de códigos de caracterestring.rep(s, n [,sep]) -- Repetir string n vezes com separadorstring.reverse(s) -- Inverter stringFormatação
Seção intitulada “Formatação”string.format(fmt, ...) -- Formatação estilo printfEspecíficadores de formato: %d (inteiro), %f (float), %s (string), %q (quoted), %x (hex), %o (octal), %e (científico), %% (% literal)
local s = "Hello, World!"
-- Pattern matchinglocal start, stop = string.find(s, "World") -- 8, 12local word = string.match(s, "%w+") -- "Hello"
-- Substituiçãolocal new = string.gsub(s, "World", "Wippy") -- "Hello, Wippy!"
-- Sintaxe de métodolocal upper = s:upper() -- "HELLO, WORLD!"local part = s:sub(1, 5) -- "Hello"Patterns
Seção intitulada “Patterns”| Pattern | Corresponde |
|---|---|
. | Qualquer caractere |
%a | Letras |
%d | Dígitos |
%w | Alfanumérico |
%s | Espaço em branco |
%p | Pontuação |
%c | Caracteres de controle |
%x | Dígitos hexadecimais |
%z | Zero (nulo) |
[set] | Classe de caractere |
[^set] | Classe negada |
* | 0 ou mais (greedy) |
+ | 1 ou mais (greedy) |
- | 0 ou mais (lazy) |
? | 0 ou 1 |
^ | Início da string |
$ | Fim da string |
%b() | Par balanceado |
(...) | Grupo de captura |
Versões maiúsculas (%A, %D, etc.) correspondem ao complemento.
Funções Math
Seção intitulada “Funções Math”Funções e constantes matemáticas:
Constantes {id=“math-constants”}
Seção intitulada “Constantes {id=“math-constants”}”math.pi -- 3.14159...math.huge -- Infinitomath.mininteger -- Inteiro mínimomath.maxinteger -- Inteiro máximoOperações Básicas
Seção intitulada “Operações Básicas”math.abs(x) -- Valor absolutomath.min(...) -- Mínimo dos argumentosmath.max(...) -- Máximo dos argumentosmath.floor(x) -- Arredondar para baixomath.ceil(x) -- Arredondar para cimamath.modf(x) -- Partes inteira e fracionáriamath.fmod(x, y) -- Resto de ponto flutuantePotências e Raízes
Seção intitulada “Potências e Raízes”math.sqrt(x) -- Raiz quadradamath.pow(x, y) -- x^y (ou use operador x^y)math.exp(x) -- e^xmath.log(x [,base]) -- Log natural (ou log base n)Trigonometria
Seção intitulada “Trigonometria”math.sin(x) math.cos(x) math.tan(x) -- Radianosmath.asin(x) math.acos(x) math.atan(y [,x])math.sinh(x) math.cosh(x) math.tanh(x) -- Hiperbólicomath.deg(r) -- Radianos para grausmath.rad(d) -- Graus para radianosNúmeros Aleatórios
Seção intitulada “Números Aleatórios”math.random() -- Float aleatório [0,1)math.random(n) -- Inteiro aleatório [1,n]math.random(m, n) -- Inteiro aleatório [m,n]math.randomseed(x) -- Definir seed aleatórioConversão de Tipo
Seção intitulada “Conversão de Tipo”math.tointeger(x) -- Converter para inteiro ou nilmath.type(x) -- "integer", "float", ou nilmath.ult(m, n) -- Comparação unsigned less-thanCorrotinas
Seção intitulada “Corrotinas”Criação e controle de corrotinas. Veja Channels and Coroutines para channels e padrões concorrentes:
coroutine.create(fn) -- Criar corrotina de funçãocoroutine.resume(co, ...) -- Iniciar/continuar corrotinacoroutine.yield(...) -- Suspender corrotina, retornar valores para resumecoroutine.status(co) -- "running", "suspended", "normal", "dead"coroutine.running() -- Corrotina atual (nil se thread principal)coroutine.wrap(fn) -- Criar corrotina como função chamávelCriando Corrotinas Concorrentes
Seção intitulada “Criando Corrotinas Concorrentes”Criar uma corrotina concorrente que executa independentemente (específico Wippy):
coroutine.spawn(fn) -- Criar função como corrotina concorrente-- Criar tarefa em backgroundcoroutine.spawn(function() while true do check_health() time.sleep("30s") endend)
-- Continuar execução principal imediatamenteprocess_request()Tratamento de Erros
Seção intitulada “Tratamento de Erros”Criação e classificação de erros estruturados. Veja Error Handling para documentação completa:
Constantes {id=“error-constants”}
Seção intitulada “Constantes {id=“error-constants”}”errors.UNKNOWN -- Erro não classificadoerrors.INVALID -- Argumento ou entrada inválidoerrors.NOT_FOUND -- Recurso não encontradoerrors.ALREADY_EXISTS -- Recurso já existeerrors.PERMISSION_DENIED -- Permissão negadaerrors.TIMEOUT -- Operação expirouerrors.CANCELED -- Operação canceladaerrors.UNAVAILABLE -- Serviço indisponívelerrors.INTERNAL -- Erro internoerrors.CONFLICT -- Conflito (ex: modificação concorrente)errors.RATE_LIMITED -- Limite de taxa excedidoFunções {id=“error-functions”}
Seção intitulada “Funções {id=“error-functions”}”-- Criar erro de stringlocal err = errors.new("something went wrong")
-- Criar erro com metadadoslocal err = errors.new({ message = "User not found", kind = errors.NOT_FOUND, retryable = false, details = {user_id = 123}})
-- Encapsular erro existente com contextolocal wrapped = errors.wrap(err, "failed to load profile")
-- Verificar tipo de erroif errors.is(err, errors.NOT_FOUND) then -- tratar não encontradoend
-- Obter call stack do errolocal stack = errors.call_stack(err)Métodos de Erro
Seção intitulada “Métodos de Erro”err:message() -- Obter string de mensagem de erroerr:kind() -- Obter tipo de erro (ex: "NOT_FOUND")err:retryable() -- true, false, ou nil (desconhecido)err:details() -- Obter tabela de detalhes ou nilerr:stack() -- Obter stack trace como stringUTF-8 Unicode
Seção intitulada “UTF-8 Unicode”Tratamento de strings UTF-8 Unicode:
Constantes {id=“utf8-constants”}
Seção intitulada “Constantes {id=“utf8-constants”}”utf8.charpattern -- Pattern correspondendo um único caractere UTF-8Funções {id=“utf8-functions”}
Seção intitulada “Funções {id=“utf8-functions”}”utf8.char(...) -- Criar string de codepoints Unicodeutf8.codes(s) -- Iterador sobre codepoints: for pos, code in utf8.codes(s)utf8.codepoint(s [,i [,j]]) -- Obter codepoints nas posições i até jutf8.len(s [,i [,j]]) -- Contar caracteres UTF-8 (não bytes)utf8.offset(s, n [,i]) -- Posição em bytes do n-ésimo caractere a partir da posição ilocal s = "Hello, 世界"
-- Contar caracteres (não bytes)print(utf8.len(s)) -- 9
-- Iterar sobre codepointsfor pos, code in utf8.codes(s) do print(pos, code, utf8.char(code))end
-- Obter codepoint na posiçãolocal code = utf8.codepoint(s, 8) -- Primeiro caractere chinês
-- Criar string de codepointslocal emoji = utf8.char(0x1F600) -- Rosto sorridenteRecursos Restritos
Seção intitulada “Recursos Restritos”Os seguintes recursos Lua padrão NÃO estão disponíveis por segurança:
| Recurso | Alternativa |
|---|---|
load, loadstring, loadfile, dofile | Use módulo Dynamic Evaluation |
collectgarbage | GC automático |
rawlen | Use operador # |
io.* | Use módulo File System |
os.execute, os.exit, os.remove, os.rename, os.tmpname | Use módulos Command Execution, Environment |
debug.* (exceto traceback) | Não disponível |
package.loadlib | Bibliotecas nativas não suportadas |
Veja Também
Seção intitulada “Veja Também”- Channels and Coroutines - Channels estilo Go para concorrência
- Error Handling - Criação e tratamento de erros estruturados
- OS Time - Funções de tempo do sistema