Expresiones

Las expresiones calculan valores a partir de valores literales y variables.

  • Operaciones aritméticas
  • Operaciones relacionales
  • Operaciones lógicas
  • Concatenación
  • Duración
  • Precedencia

Operaciones aritméticas

Las operaciones aritméticas se realizan en valores numéricos. Si se usa un valor de cadena en una operación aritmética, se convierte en un número; si eso falla, se devuelve un error.

   
a+ b sumar a y b
a - b restar b de a
a*b multiplicar a y b
a/ b dividir a por b
a% b módulo = a - math.floor (a/b) *b
a^b eleva a a la potencia b; b puede ser cualquier número
-a negar un

Operaciones relacionales

Las operaciones relacionales comparan dos valores y devuelven verdadero si la relación se cumple y falso si no lo está. Se pueden realizar operaciones relacionales entre valores de cualquier tipo. Si los valores no son del mismo tipo, se devuelve false. Los números se comparan de la forma habitual. Las cadenas se comparan utilizando la secuencia de clasificación de la configuración regional actual.

   
a == b a es igual a b
a ~= b a no es igual a b
a < b a es menor que b
a > b a es mayor que b
a <= b a es menor o igual a b
a >= b a es mayor o igual que b

Operaciones lógicas

Las operaciones lógicas se realizan tradicionalmente en valores booleanos, pero en este lenguaje se pueden realizar en dos valores cuales. nil y false se consideran falsos y cualquier otro valor se considera verdadero. Las operaciones lógicas utilizan la evaluación abreviada, en la que si el primer valor determina el resultado de la operación, el segundo valor no se evalúa.

   
a y b si a es falso o nulo, devuelve a; de lo contrario, devuelve b
a o b si a no es falso ni nulo, devuelve a; de lo contrario, devuelve b
no un si a no es falso o nulo devuelve falso; de lo contrario, devuelve verdadero

Las operaciones y y o se pueden usar para la evaluación condicional dentro de una expresión:

   
a o b se puede usar para proporcionar un valor predeterminado b si a no está inicializado (nil). Esto resulta útil para los parámetros opcionales de las funciones.
a y b o c se puede usar para elegir un b o c no nulo en función de la condición a. Si a es verdadero, a y b devuelven b, y b o c devuelve b. Si a es falso, a y b devuelven falso y falso o c devuelve c. Esto equivale a un? b: c en el lenguaje de programación C.

Concatenación

La concatenación de cadenas es s1.. s2. Esto crea una nueva cadena lo suficientemente grande como para contener el contenido de s1 y s2 y copia el contenido en la nueva cadena. Se produce un error si s1 o s2 no son cadenas. Tenga en cuenta que la concatenación repetida puede tener una sobrecarga de copia considerable. Si crea una cadena de n bytes concatenando un byte a la vez, esto copiará n* (n+1) /2 bytes. Para un mejor rendimiento, puede colocar fragmentos de una cadena para concatenarlos en una tabla (se explica más adelante) y, a continuación, utilizar la función table.concat (). Un ejemplo de esto se muestra en el ejemplo COMBINE_HEADERS ().

Duración

#s devuelve la longitud de una cadena s. El operador # también se usa con tablas de matrices, como se explica más adelante.

Precedencia

La prioridad de los operadores determina el orden en el que se realizan las operaciones en una expresión; las operaciones de mayor prioridad se realizan antes que las de menor prioridad. Como de costumbre, el orden de precedencia se puede anular con paréntesis. Por ejemplo, en a + b \* c, * tiene mayor prioridad que +, por lo que la expresión se evalúa como a + (b \* c).

   
más alto
- no # - (unario)
-
  • / %
- ..
- = ~= < > <= >=
- and
más bajo O bien

Las operaciones con la misma prioridad se realizan de izquierda a derecha (asociativo de izquierda), excepto ^ y.. que se realizan de derecha a izquierda (asociativo de derecha). Entonces a^b^c se evalúa como a^ (b^c).

Expresiones