Latest web development tutorials

tipos de dados Lua

Lua é uma linguagem, variáveis, definições de tipo de tipagem dinâmica não só precisa de atribuir valores a variáveis. Os valores podem ser armazenados em variáveis, transmitido como um parâmetro ou devolver os resultados.

Lua tem oito tipos básicos são: nil, booleano, número, corda, userdata, função, linha e tabela.

Tipos de dados descrição
zero O mais simples, apenas o valor nil pertencem a essa classe representa um valor inválido (equivalente a falsa em expressões condicionais).
boolean Ele contém dois valores: falsas e verdadeiras.
número Ele representa o tipo de precisão dupla de ponto flutuante verdadeiro
corda Corda por um par de aspas duplas ou simples para representar
função Ou pela função C escrito em Lua
userdata C representa qualquer estrutura de dados armazenados numa variável
fio Que a implementação de uma linha separada para a implementação de programas de cooperação
mesa tabelas Lua (tabela) é na verdade uma "matriz associativa" (arrays associativos), o índice da matriz pode ser um número ou uma string. Na Lua, a tabela é criada pela "construção de expressão" para completar a construção de expressão mais simples {} é usado para criar uma tabela vazia.

Podemos usar a função de tipo para testar o tipo de uma determinada variável ou o valor:

print(type("Hello world"))      --> string
print(type(10.4*3))             --> number
print(type(print))              --> function
print(type(type))               --> function
print(type(true))               --> boolean
print(type(nil))                --> nil
print(type(type(X)))            --> string

nil (Vazio)

O nulo não tem qualquer tipo indica um valor válido, ele é apenas um valor - nil, tais como imprimir uma atribuição de variável não faz, ele produzirá um valor nulo:

> print(type(a))
nil
>

Para as variáveis ​​globais e mesa, nulo e uma ação de "excluir", à mesa ou tabela de variáveis ​​variável global atribuído um valor nulo, o equivalente a excluí-los, execute o seguinte código para saber:

tab1 = { key1 = "val1", key2 = "val2", "val3" }
for k, v in pairs(tab1) do
    print(k .. " - " .. v)
end
 
tab1.key1 = nil
for k, v in pairs(tab1) do
    print(k .. " - " .. v)
end

booleano (Boolean)

boolean tipo tem apenas dois valores possíveis: verdadeiro (true) e falso (false), Lua false e nil como "false", o outro "true":

print(type(true))
print(type(false))
print(type(nil))
 
if false or nil then
    print("至少有一个是 true")
else
    print("false 和 nil 都为 false!")
end

O código acima é executado da seguinte forma:

$ lua test.lua 
boolean
boolean
nil
false 和 nil 都为 false!

número (Digital)

Lua padrão é único tipo um número - double (precisão dupla) Tipo (o tipo padrão pode ser modificado de definição luaconf.h), o seguinte texto é visto como tipo de número:

print(type(2))
print(type(2.2))
print(type(0.2))
print(type(2e+1))
print(type(0.2e-1))
print(type(7.8263692594256e-06))

Correndo instância »

Os resultados do código acima:

number
number
number
number
number
number

string (string)

Corda por um par de aspas duplas ou simples para representar.

string1 = "this is string1"
string2 = 'this is string2'

Você também pode usar dois suportes "[[]]" para significar "um" string.

html = [[
<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool本教程</a>
</body>
</html>
]]
print(html)

Os seguintes resultados de execução de código:

<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool本教程</a>
</body>
</html>

Quando uma seqüência numérica para realizar operações aritméticas, Lua vai tentar virar esse número em uma seqüência de números:

> print("2" + 6)
8.0
> print("2" + "6")
8.0
> print("2 + 6")
2 + 6
> print("-2e2" * "6")
-1200.0
> print("error" + 1)
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
	stdin:1: in main chunk
	[C]: in ?
> 

O código "erro" acima + 1 erro de execução, a concatenação usando .., tais como:

> print("a" .. 'b')
ab
> print(157 .. 428)
157428
> 

Use # para calcular o comprimento da corda, a corda na parte da frente, seguindo exemplos:

> len = "www.w3cschool.cc"
> print(#len)
16
> print(#"www.w3cschool.cc")
16
> 

tabela (tabela)

Na Lua, a tabela é criada pela "construção de expressão" para completar a construção de expressão mais simples {} é usado para criar uma tabela vazia. Você também pode adicionar alguns dados na tabela, mesa de inicialização direta:

-- 创建一个空的 table
local tbl1 = {}
 
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}

tabelas Lua (tabela) é na verdade uma "matriz associativa" (arrays associativos), o índice da matriz pode ser um número ou uma string.

-- table_test.lua 脚本文件
a = {}
a["key"] = "value"
key = 10
a[key] = 22
a[key] = a[key] + 11
for k, v in pairs(a) do
    print(k .. " : " .. v)
end

resultados da execução de script:

$ lua table_test.lua 
key : value
10 : 33

Ao contrário de outras línguas da matriz como uma matriz de índice inicial 0, o índice inicial padrão na tabela da Lua em geral 1.

-- table_test2.lua 脚本文件
local tbl = {"apple", "pear", "orange", "grape"}
for key, val in pairs(tbl) do
    print("Key", key)
end

resultados da execução de script:

$ lua table_test2.lua 
Key	1
Key	2
Key	3
Key	4

tamanho da tabela de comprimento fixo não é, há um aumento automático do comprimento da mesa para adicionar novos dados, a tabela original não é nula.

-- table_test3.lua 脚本文件
a3 = {}
for i = 1, 10 do
    a3[i] = i
end
a3["key"] = "val"
print(a3["key"])
print(a3["none"])

resultados da execução de script:

$ lua table_test3.lua 
val
nil

function (Função)

Na Lua, a função é considerado "valores de primeira classe (First-Class Value)", pode haver função variável:

-- function_test.lua 脚本文件
function factorial1(n)
    if n == 0 then
        return 1
    else
        return n * factorial1(n - 1)
    end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))

resultados da execução de script:

$ lua function_test.lua 
120
120

função pode ser função anônima (função anônima), através da passagem de parâmetros:

-- function_test2.lua 脚本文件
function anonymous(tab, fun)
    for k, v in pairs(tab) do
        print(fun(k, v))
    end
end
tab = { key1 = "val1", key2 = "val2" }
anonymous(tab, function(key, val)
    return key .. " = " .. val
end)

resultados da execução de script:

$ lua function_test2.lua 
key1 = val1
key2 = val2

thread (thread)

Na Lua, o segmento principal é um programa de colaboração (co-rotina). É com thread (thread) quase tem sua própria pilha independente, variáveis ​​locais e ponteiro de instrução, você pode compartilhar variáveis ​​globais e na maioria das outras coisas com outros programas de colaboração.

diferença segmento com coroutines: vários segmentos podem ser executados simultaneamente, e co-rotina pode executar apenas um, a qualquer momento, e correndo coroutine só anda (suspender) apenas quando parada.


userdata (tipo personalizado)

userdata é um tipo de dados definido pelo usuário usado pelo aplicativo indica uma biblioteca ou C / C ++ linguagem criada pode ser quaisquer dados de C / C ++ de qualquer tipo de dados (geralmente um struct e ponteiros) armazenado na Lua variável chamada.