English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Lua est un langage de programmation dynamique, les variables n'ont pas besoin de définition de type, il suffit d'affecter une valeur à la variable. Les valeurs peuvent être stockées dans des variables, transmises en tant que paramètres ou retournées en tant que résultats.
Il y a dans Lua }} 8 les types de base sont : nil, boolean, number, string, userdata, function, thread et table.
type de données | description |
---|---|
nil | C'est le plus simple, car seule la valeur nil appartient à cette catégorie, représentant une valeur invalide (équivalente à false dans les expressions conditionnelles). |
boolean | contient deux valeurs : false et true. |
number | représente un nombre flottant à double précision |
string | une chaîne de caractères est représentée par un pair de guillemets doubles ou simples |
function | fonction écrite en C ou en Lua |
userdata | représente une structure de données C stockée dans une variable |
thread | représente une ligne d'exécution indépendante, utilisée pour exécuter des coroutines |
table | En Lua, un tableau (table) est en réalité un "tableau associatif" (associative arrays), les indices peuvent être des nombres, des chaînes de caractères ou des tableaux. Dans Lua, la création d'un tableau est effectuée par une "expression de construction", la plus simple étant {} qui crée un tableau vide. |
Nous pouvons utiliser la fonction type pour tester le type d'une variable ou d'une 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
Le type nil représente un type qui n'a aucune valeur valable, il n'a qu'une seule valeur -- nil, par exemple, si vous imprimez une variable non assignée, elle affichera une valeur nil :
> print(type(a)) nil >
Pour les variables globales et les tableaux, nil a également une fonction "supprimer". Assigner une valeur nil à une variable globale ou à une variable dans un tableau équivaut à les supprimer. Exécuter le code suivant pour le voir :
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
> type(X) nil > type(X)==nil false > type(X)=="nil" true >
le résultat de type(X)==nil est false la raison en est que type(X) est en réalité une chaîne de caractères "nil", c'est un type string :
type(type(X))==string
Le type boolean a deux valeurs possibles : true (vrai) et false (faux), Lua considère false et nil comme false, et le reste comme true, le nombre 0 est aussi true :
print(type(true)) print(type(false)) print(type(nil)) if false or nil then print(\ else print(\ end if 0 then print(\ else print(\ end
Le résultat de l'exécution du code suivant est le suivant :
$ lua test.lua boolean boolean nil false et nil sont false Le nombre 0 est true
Lua a seulement un type number par défaut -- double (double précision) type (par défaut, le type peut être modifié dans luaconf.h), les suivant sont considérés comme des types number :
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))
Le résultat de l'exécution du code suivant est :
number number number number number number
Les chaînes de caractères sont représentées par un couple de guillemets doubles ou simples.
string1 = "this is string"1" string2 = 'this is string'2'
On peut aussi utiliser 2 Un paire de crochets "[[]]" pour représenter "un bloc" de chaîne de caractères.
html = [[ <html> <head></head> <a href=\//fr.oldtoolbag.com/">Base Tutorial Website</a> </body> </html> ]] print(html)Le résultat de l'exécution du code suivant est :
<html> <head></head> <a href=\//fr.oldtoolbag.com/">Base Tutorial Website</a> </body> </html>
Lorsqu'il s'agit d'effectuer une opération arithmétique sur une chaîne de caractères numériques, Lua essaie de convertir cette chaîne de caractères numériques en un nombre :
> print(\2" + 6) 8.0 > print(\2" + "6") 8.0 > print(\2 + 6") 2 + 6 > print(\-2e2" * "6") -1200.0 > print(\ + 1) stdin:1: attempt to perform arithmetic on a string value stack traceback: stdin:1: in main chunk [C]: in ? >
Dans le code suivant \ + 1L'exécution a échoué, la connexion de chaînes utilise .. , par exemple :
> print("a" .. 'b') ab > print(157 .. 428) 157428 >
Utilisez # pour calculer la longueur d'une chaîne de caractères, placez-le devant la chaîne de caractères, comme dans les exemples suivants :
> len = "fr.oldtoolbag.com" > print(#len) 14 > print(#"fr.oldtoolbag.com" 14 >
Dans Lua, la création d'une table se fait par "expression de construction", la plus simple expression de construction est {} pour créer une table vide. Vous pouvez également ajouter des données directement à la table pour l'initialiser :
-- Créer une table vide local tbl1 ={} -- initialisation directe de la table local tbl2 ={"apple", "pear", "orange", "grape"}
En Lua, une table (tableau) est en réalité un "tableau associatif" (associative arrays), les indices peuvent être des nombres ou des chaînes de caractères.
-- fichier de script table_test.lua a = {} a["clé"] = "valeur" clé = 10 a[key] = 22 a[key] = a[key] + 11 for k, v in pairs(a) do print(k .. " : " .. v) end
结果执行脚本:
$ lua table_test.lua clé : valeur 10 : 33
Contrairement aux tableaux d'autres langages qui commencent par l'index 0, dans Lua, l'index initial par défaut des tableaux est généralement : 1 commencez.
-- table_test2.lua 脚本文件 local tbl = {"apple", "pear", "orange", "grape"} for key, val in pairs(tbl) do print("Clé", key) end
结果执行脚本:
$ lua table_test2.lua Clé 1 Clé 2 Clé 3 Clé 4
La table ne possède pas de taille fixe, elle augmente automatiquement de taille lorsque de nouvelles données sont ajoutées, et toutes les tables non initialisées sont nil.
-- table_test3.lua 脚本文件 a3 ={} for i = 1, 10 do a3[i] = i end a3["key"] = "val" print(a3["key"]) print(a3["none"])
结果执行脚本:
$ lua table_test3.lua val nil
En Lua, la fonction est considérée comme une "première classe de valeur (First-Classe Valeur)",la fonction peut exister dans une variable :
-- function_test.lua fichier de script 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))
结果执行脚本:
$ lua function_test.lua 120 120
function 可以以匿名函数(anonymous function)的方式通过参数传递:
-- function_test2.lua 脚本文件 function testFun(tab,fun) for k ,v in pairs(tab) do print(fun(k,v)); end end tab={key1="val1",key2="val2"}; testFun(tab, function(key,val)--函数匿名 return key.."="..val; end );
结果执行脚本:
$ lua function_test2.lua key1 = val1 key2 = val2
在 Lua 中,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
区别线程与协程:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。