Exemplos de Scripts Lua
A seguir apresentamos alguns exemplos de código Lua aplicados a tarefas recorrentes de programação.
Manipulação de Arquivos
local fd = io.open("c:\\teste.txt", "wb")
fd:write("um\r\n")
fd:write("dois\r\n")
fd:write("tres\r\n")
fd:close()
fd = io.open("c:\\teste.txt", "rb")
local data = fd:read("*all")
fd:close()
print(data)
Manipulação de Data/Hora
print(os.date())
-- 09/16/10 13:59:32
print(os.date("(%a) %H:%M:%S %Y-%m-%d "))
-- (Thu) 14:01:20 2010-09-16
-- benchmark
local s = 0
local begin_time = os.clock()
for i=1,10000000 do s = s + i end
print("Duração " .. os.clock() - begin_time)
-- Duração 0.40600000000006
Manipulação de Texto
local msg="Alarme de Temperatura CRÍTICA ATINGIDA: 78°C (Limite: 50°C)"
-- Operações de transformação
print(string.lower(msg))
-- alarme de temperatura crítica atingida: 78°c (limite: 50°c)
print(string.upper(msg))
-- ALARME DE TEMPERATURA CRÍTICA ATINGIDA: 78°C (LIMITE: 50°C)
-- Cálculo do comprimento do texto
print(string.len(msg))
-- 59
-- Recorte do texto
print(string.sub(msg,10,-15))
-- Temperatura CRÍTICA ATINGIDA: 78°C
-- Busca de sub-texto e Casamento de padrões
print(string.find(msg, "Temperatura"))
-- 11
print(string.match(msg, "%d+°C"))
-- 78°C
for i in string.gmatch(msg, "%d+°C") do
print("Achei "..i)
end
-- Achei 78°C
-- Achei 50°C
print(string.gsub(msg, "°C","°F"))
-- Alarme de Temperatura CRÍTICA ATINGIDA: 78°F (Limite: 50°F)
-- Formatação de texto
print(string.format("O valor aprox. de PI é %.4f", math.pi))
-- O valor aprox. de PI é 3.1416
Funções Matemáticas Nativas
print(math.random())
-- 0.010559404278695
print(math.sin(math.pi/2))
-- 1
print(math.cos(math.pi))
-- -1
print(math.floor(math.pi))
-- 3
print(math.ceil(math.pi))
-- 4
print(2^10)
-- 1024
print(math.log10(1000))
-- 3
print(math.max(1,3,100,23))
-- 100
print(math.min(1,3,100,23))
-- 1
Funções de Depuração
-- examinando conteúdo do módulo math da biblioteca padrão
for i in pairs(math) do
print(i)
end
-- inspeção de tabela t, imprime "chave : valor (tipo do valor)"
for k,v in pairs(t) do
print(k .. ":" .. tostring(v) .. "(" .. type(v) .. ")")
Uso do módulo debug
-- funções aninhadas
function a()
print("ok")
print(debug.traceback())
end
function b()
a()
end
function c()
b()
end
c()
-- inspeção da função em execução
level = debug.getinfo(1)
print("Função" .. level.name)
print("Codigo Fonte\n" .. level.source .. "\n")
print("Linha Corrente" .. level.currentline)
print("Numero de upvalues" .. level.nups)
print("\n\n")