Expressions

Les expressions calculent les valeurs à partir de valeurs variables et littérales.

  • Opérations arithmétiques
  • Opérations relationnelles
  • Opérations logiques
  • Concaténation
  • Longueur
  • Priorité

Opérations arithmétiques

Les opérations arithmétiques sont effectuées sur les valeurs numériques. Si une valeur de chaîne est utilisée dans une opération arithmétique, elle est convertie en nombre — si cela échoue, une erreur est renvoyée.

   
a + b ajouter a et b
a - b soustraire b de a
a * b multiplier a et b
a/b diviser a par b
a% b modulo = a - math.floor(a/b)*b
a ^ b élever a à la puissance b ; b peut être n’importe quel nombre
-a annule a

Opérations relationnelles

Les opérations relationnelles comparent deux valeurs et retournent true si la relation est satisfaite et false si ce n’est pas le cas. Des opérations relationnelles peuvent être effectuées entre des valeurs de n’importe quel type. Si les valeurs ne sont pas du même type, false est renvoyé. Les nombres sont comparés de la manière habituelle. Les chaînes sont comparées à l’aide de la séquence de classement pour les paramètres régionaux actuels.

   
a == b a est égal à b
a ~= b a n’est pas égal à b
a < b a est inférieur à b
a > b a est supérieur à b
a <= b a est inférieur ou égal à b
a >= b a est supérieur ou égal à b

Opérations logiques

Les opérations logiques sont traditionnellement effectuées sur des valeurs booléennes, mais dans ce langage, elles peuvent être effectuées sur deux valeurs. nil et false est considéré comme faux et toute autre valeur est considérée comme vrai. Les opérations logiques utilisent l’évaluation raccourci, où si la première valeur détermine le résultat de l’opération, la deuxième valeur n’est pas évaluée.

   
a and b si a est faux ou nul alors retournez un autre retour b
a or b si a n’est pas faux et pas nul alors retournez un autre retour b
not a si un n’est pas faux ou nul retourne faux sinon retourne vrai

Les opérations et et ou peuvent être utilisées pour l’évaluation conditionnelle dans une expression :

   
a or b peut être utilisé pour fournir une valeur par défaut b si a est non initialisé (nil). Ceci est utile pour les paramètres optionnels dans les fonctions.
a and b or c peut être utilisé pour choisir non néant b ou c en fonction de la condition a. Si a est vrai, alors a et b renvoie b, et b ou c renvoie b. Si a est faux, alors a et b renvoie false et false ou c renvoie c. Cela équivaut à a ? b: c dans le langage de programmation C.

Concaténation

La concaténation de chaîne est s1.. s2. Cela crée une nouvelle chaîne assez grande pour contenir le contenu de s1 et s2 et copie le contenu dans la nouvelle chaîne. Une erreur se produit si s1 ou s2 ne sont pas des chaînes. Notez que la concaténation répétée peut avoir des frais de copie considérables. Si vous construisez une chaîne de n octets en concaténant un octet à la fois, cela copiera n* (n+1) /2 octets. Pour de meilleures performances, vous pouvez mettre des morceaux d’une chaîne à concaténer dans une table (discuté plus loin), puis utiliser la fonction table.concat (). Un exemple de ceci est illustré dans l’exemple COMBINE_HEADERS ().

Longueur

La longueur d’une chaîne s est renvoyée par #s. L’opérateur # est également utilisé avec les tables de tableau, comme discuté plus loin.

Priorité

La priorité de l’opérateur détermine l’ordre dans lequel les opérations sont exécutées dans une expression, avec des opérations de priorité supérieure effectuées avant celles de priorité inférieure. L’ordre de priorité peut, comme d’habitude, être remplacé par des parenthèses. Par exemple, dansa + b \* c, * a une priorité supérieure à +, de sorte que l’expression est évaluée commea + (b \* c).

   
highest ^
- not # - (unary)
- * / %
- ..
- = ~= < > <= >=
- and
lowest or

Les opérations avec la même priorité sont exécutées de gauche à droite (associative gauche), sauf ^ et.. qui sont exécutées de droite à gauche (associative droite). Donc a^b^c est évalué comme a^(b^c).