Expresiones

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

  • Operaciones aritméticas
  • Operaciones Relacionales
  • Operaciones Lógicas
  • Concatenación
  • Longitud
  • Precedencia

Operaciones aritméticas

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

   
a + b agregar a y b
a: B restar b de a
a * b multiplicar a y b
a/b dividir a por b
% b modulo = a: Math.floor (a/b) *b
a ^ b elevar a la potencia b; b puede ser cualquier número
-a negar a

Operaciones relacionales

Las operaciones relacionales comparan dos valores y devuelven verdadero si la relación está satisfecha y falso si no lo es. Las operaciones relacionales se pueden realizar entre valores de cualquier tipo. Si los valores no son del mismo tipo, se devuelve false. Los números se comparan de la manera habitual. Las cadenas se comparan mediante la secuencia de intercalación para 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 que 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 cualesquiera. nil y false se consideran false y cualquier otro valor se considera true. Las operaciones lógicas utilizan la evaluación de atajo, donde 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 un otro retorno b
a o b si a no es falso y no nulo, devuelve un retorno b
no es un si a no es falso o nulo devuelve falso else devuelve verdadero

Las operaciones e y o se pueden utilizar 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 se inicializa (nil). Esto es útil para los parámetros opcionales en las funciones.
a y b o c se puede usar para elegir no nil b o c en función de la condición a. Si a es verdadero, entonces a y b devuelve b, y b o c devuelve b. Si a es falso, entonces a y b devuelve false y false o c devuelve c. Esto es equivalente 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 construye una cadena de n bytes concatenando un byte a la vez, esto copiará n* (n+1) /2 bytes. Para un mejor rendimiento, puede poner piezas de una cadena para concatenar en una tabla (discutido más adelante) y luego usar la función table.concat (). Un ejemplo de esto se muestra en el ejemplo COMBINE_HEADERS ().

Longitud

La longitud de una cadena s es devuelta por #s. El operador # también se utiliza con tablas de matriz, como se discute más adelante.

Precedencia

La precedencia del operador determina el orden en el que se realizan las operaciones en una expresión, con operaciones de mayor precedencia realizadas antes que aquellas con menor precedencia. El orden de precedencia puede, como de costumbre, ser anulado por 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)
- * / %
- ..
- = ~= < > <= >=
- y
más bajo O bien:

Las operaciones con la misma precedencia 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