Latest web development tutorials

types de données Lua

Lua est un langage typé dynamiquement, des variables, des définitions de type ne nécessitent pas seulement attribuer des valeurs aux variables. Les valeurs peuvent être stockées dans des variables, passées comme un paramètre ou retourner les résultats.

Lua dispose de huit types de base sont: nil, booléen, nombre, chaîne, userdata, la fonction, le fil et la table.

Types de données description
néant Le plus simple, seule la valeur nil appartiennent à cette classe représente une valeur non valide (équivalente à faux dans les expressions conditionnelles).
booléen Il contient deux valeurs: fausses et vraies.
nombre Il représente le type de double précision en virgule flottante réel
string Chaîne par une paire de guillemets doubles ou simples pour représenter
fonction Ou par la fonction C écrit en Lua
userdata C représente toute structure de données stockée dans une variable
fil Que la mise en œuvre d'une ligne distincte pour la mise en œuvre de programmes de coopération
table Lua tables (tableau) est en fait un "tableau associatif" (des tableaux associatifs), l'indice de la matrice peut être un nombre ou une chaîne. Dans Lua, la table est créée par la "construction d'expression" pour terminer le plus simple construction d'expression {} est utilisé pour créer une table vide.

Nous pouvons utiliser la fonction de type pour tester le type d'une variable ou valeur donnée:

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 (vide)

nil n'a pas de type indique une valeur valide, il n'y a qu'une seule valeur - nil, tels que l'impression d'une affectation de variable ne fonctionne pas, il va afficher une valeur nulle:

> print(type(a))
nil
>

Pour les variables globales et une table, nulle et une action "supprimer", à la table ou table de variables variable globale attribué une valeur nulle, équivalente à les supprimer, exécutez le code suivant à savoir:

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

booléen (Boolean)

type booléen a seulement deux valeurs possibles: true (vrai) et false (faux), Lua à false et nil comme "false", l'autre "true":

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

Le code ci-dessus est exécuté comme suit:

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

Numéro (Digital)

Lua défaut est seulement un type de numéro - (double précision) Type (le type de défaut peut être modifié dans la définition de luaconf.h), le texte suivant est considéré comme le type de numéro:

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))

Exécution instance »

Résultats du code ci-dessus:

number
number
number
number
number
number

string (chaîne)

Chaîne par une paire de guillemets doubles ou simples pour représenter.

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

Vous pouvez également utiliser deux crochets "[[]]" pour signifier "une" chaîne.

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

Les résultats suivants d'exécution de code:

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

Quand une chaîne numérique pour effectuer des opérations arithmétiques, Lua va essayer de transformer ce numéro dans une chaîne de nombres:

> 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 ?
> 

Le code «erreur» ci-dessus + 1 erreur d'exécution, la concaténation de chaîne en utilisant .., tels que:

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

Utilisez # pour calculer la longueur de la chaîne, la chaîne à l'avant, les exemples suivants:

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

table (Table)

Dans Lua, la table est créée par la "construction d'expression" pour terminer le plus simple construction d'expression {} est utilisé pour créer une table vide. Vous pouvez également ajouter des données dans la table, table d'initialisation directe:

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

Lua tables (tableau) est en fait un "tableau associatif" (des tableaux associatifs), l'indice de la matrice peut être un nombre ou une chaîne.

-- 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

Script résultats d'exécution:

$ lua table_test.lua 
key : value
10 : 33

Contrairement à d'autres langues du tableau comme un tableau d'index initial 0, l'indice initial par défaut dans le tableau Lua généralement 1.

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

Script résultats d'exécution:

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

taille de la table ne sont pas de longueur fixe, il y a une augmentation automatique de la longueur de la table pour ajouter de nouvelles données, la table d'origine est non nul.

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

Script résultats d'exécution:

$ lua table_test3.lua 
val
nil

function (Fonction)

Dans Lua, la fonction est considérée comme «valeurs de première classe (First Class-Value)", il peut y avoir fonction variable:

-- 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))

Script résultats d'exécution:

$ lua function_test.lua 
120
120

fonction peut être fonction anonyme (fonction anonyme) par le passage de paramètres:

-- 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)

Script résultats d'exécution:

$ lua function_test2.lua 
key1 = val1
key2 = val2

fil (thread)

Dans Lua, le thread principal est un programme de collaboration (de coroutine). Il est avec un fil (thread) a presque sa propre pile indépendante, les variables locales et pointeur d'instruction, vous pouvez partager des variables globales et la plupart des autres choses avec d'autres programmes de collaboration.

différence de discussion avec coroutines: plusieurs threads peuvent fonctionner simultanément, et coroutine ne peuvent exécuter un à tout moment, et coroutine courir seulement accrocher (suspendre) uniquement en mode Pause.


userdata (type personnalisé)

userdata est un type de données défini par l'utilisateur utilisé par l'application indique une bibliothèque ou C / C ++ de langage créé peut être toutes les données de C / C ++ de tout type de données (généralement un struct et pointeurs) stockés dans Lua appels variable.