Observações:
type() pode ser usada para verificar o tipo de um valor.Em Lua, existem oito tipos de dados básicos:
1. nil:
nil.Exemplo:
local variavel = nil
2. boolean:
true ou false.Exemplo:
local ehVerdadeiro = true
local ehFalso = false
if ehVerdadeiro then
print("Verdadeiro")
else
print("Falso")
end
3. number:
Exemplo:
local numeroInteiro = 10
local numeroReal = 3.14
print(numeroInteiro + numeroReal)
Inteiro vs float (Lua 5.4):
number tem duas representações internas: integer e float.type() devolve "number" para ambas; quem as distingue é math.type(), que devolve "integer", "float" ou nil (quando o valor não é um número)./ e a exponenciação ^ sempre produzem float, mesmo entre inteiros e mesmo quando o resultado é exato (4 / 2 é 2.0). Já a divisão inteira // preserva o subtipo: inteiro // inteiro produz inteiro.math.tointeger(x) converte um float de valor inteiro para o subtipo integer; devolve nil quando a conversão não é possível.Exemplo:
assert(math.type(42) == "integer")
assert(math.type(3.14) == "float")
assert(math.type("oi") == nil) -- não é número
-- `/` e `^` sempre produzem float:
assert(4 / 2 == 2.0 and math.type(4 / 2) == "float")
assert(2 ^ 3 == 8.0 and math.type(2 ^ 3) == "float")
-- `//` preserva inteiro entre inteiros:
assert(7 // 2 == 3 and math.type(7 // 2) == "integer")
assert(math.type(7.0 // 2) == "float") -- com float, produz float (3.0)
-- Conversão explícita float -> integer:
assert(math.tointeger(2.0) == 2)
assert(math.tointeger(2.5) == nil)
-- Na comparação, inteiro e float de mesmo valor são iguais:
assert(2 == 2.0)
4. string:
Exemplo:
local nome = "João Silva"
local frase = "Olá, mundo!"
print(nome .. " disse " .. frase)
5. function:
Exemplo:
function soma(a, b)
return a + b
end
local resultado = soma(2, 3)
print(resultado)
6. userdata:
Exemplo:
-- Não é preciso biblioteca externa para ver um userdata de verdade:
-- os arquivos abertos pela biblioteca io são userdata.
assert(type(io.stdout) == "userdata")
-- Bibliotecas C de terceiros expõem seus próprios userdata
-- (exemplo ilustrativo — "bibliotecaC" não existe de fato):
local bibliotecaC = require("bibliotecaC")
local userdata = bibliotecaC.criarObjeto()
bibliotecaC.destruirObjeto(userdata)
7. thread:
yield) e retoma (resume) sob controle do programa.corrotinas/.Exemplo:
local thread = coroutine.create(function()
print("Tarefa em thread")
end)
coroutine.resume(thread)
8. table:
Exemplo:
local tabela = {
nome = "João Silva",
idade = 30,
cidade = "Palhoça"
}
print(tabela["nome"])