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 fr " - " fr v) end tab1.key1 = nil for k, v in pairs(tab1) do print(k fr " - " fr 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))
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="/">w3cschool本教程</a> </body> </html> ]] print(html)
Les résultats suivants d'exécution de code:
<html> <head></head> <body> <a href="/">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 fr, tels que:
> print("a" fr 'b') ab > print(157 fr 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 fr " : " fr 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 fr " = " fr 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.