Appendix B: Operators and Symbols

Apéndice B: Operadores y símbolos

Este apéndice contiene una lista de los operadores y símbolos que aparecen en Rust, incluyendo los operadores y otros símbolos que aparecen por sí mismos o en el contexto de rutas, genéricos, límites de trait, macros, atributos, comentarios, tuplas y corchetes.

Operadores

La tabla B-1 contiene los operadores en Rust, un ejemplo de cómo aparecería el operador en contexto, una breve explicación y si ese operador es sobrecargable. Si un operador es sobrecargable, se lista el rasgo relevante para sobrecargar ese operador.

Tabla B-1: Operadores

OperadorEjemploExplicaciónSobrecargable?
!ident!(...), ident!{...}, ident![...]Expansor de Macros
!!exprOperador bit a bit o complemento lógicoNot
!=expr != exprComparador de No IgualdadPartialEq
%expr % exprModuloRem
%=var %= exprModulo y asignaciónRemAssign
&&expr, &mut exprPréstamo
&&type, &mut type, &'a type, &'a mut typePréstamo del puntero del tipo
&expr & exprOperador bit a bit ANDBitAnd
&=var &= exprOperador bit a bit AND y asignaciónBitAndAssign
&&expr && exprOperador lógico AND
*expr * exprMultiplicaciónMul
*=var *= exprMultiplicación y asignaciónMulAssign
**exprDireferenciaDeref
**const type, *mut typePuntero
+trait + trait, 'a + traitRestricción de tipo compuesta
+expr + exprAritmético adiciónAdd
+=var += exprAdición y asignaciónAddAssign
,expr, exprSeparador de argumentos y elementos
-- exprAritmético de NegaciónNeg
-expr - exprAritmético de sustracciónSub
-=var -= exprAritmético de sustracción y asignaciónSubAssign
->fn(...) -> type, |...| -> typeTipo de retorno en funciones y clausuras
.expr.identAcceso a miembro
...., expr.., ..expr, expr..exprRango exclusivo a la derechaPartialOrd
..=..=expr, expr..=exprRango inclusivo a la derechaPartialOrd
....exprSintaxis de actualización de estructuras
..variant(x, ..), struct_type { x, .. }Patrón “y el resto”
...expr...expr(Obsoleto, use ..= en su lugar) En un patrón: Patrón de rango inclusivo
/expr / exprDivisión aritméticaDiv
/=var /= exprDivisión aritmética y asignaciónDivAssign
:pat: type, ident: typeRestricciones
:ident: exprInicializador de campo de estructura
:'a: loop {...}Etiqueta de bucle
;expr;Terminador de declaración y elemento
;[...; len]Parte de la sintaxis de arreglos de tamaño fijo
<<expr << exprDesplazamiento a la izquierdaShl
<<=var <<= exprDesplazamiento a la izquierda y asignaciónShlAssign
<expr < exprComparador de menor quePartialOrd
<=expr <= exprComparador de menor o igual quePartialOrd
=var = expr, ident = typeAsignación/equivalencia
==expr == exprComparador de igualdadPartialEq
=>pat => exprParte de la sintaxis de match
>expr > exprComparador de mayor quePartialOrd
>=expr >= exprComparador de mayor o igual quePartialOrd
>>expr >> exprDesplazamiento a la derechaShr
>>=var >>= exprDesplazamiento a la derecha y asignaciónShrAssign
@ident @ patPatrón de enlace
^expr ^ exprOperador bit a bit XORBitXor
^=var ^= exprOperador bit a bit XOR y asignaciónBitXorAssign
|pat | patPatrón alternativo
|expr | exprOperador bit a bit ORBitOr
|=var |= exprOperador bit a bit OR y asignaciónBitOrAssign
||expr || exprOperador lógico OR
?expr?Operador de propagación de errores

Simbolos no operadores

La siguiente lista contiene todos los símbolos que no funcionan como operadores; es decir, no se comportan como una llamada de función o método.

Tabla B-2 muestra los símbolos que aparecen por sí mismos y son válidos en una variedad de ubicaciones.

Tabla B-2: Sintaxis únicas

SímbolosExplicación
'identLifetime nombrado o etiqueta de bucle
...u8, ...i32, ...f64, ...usize, etc.Literal numérico de un tipo especifico
"..."Literal de tipo String
r"...", r#"..."#, r##"..."##, etc.Literal de tipo String sin procesar
b'...'Literal de tipo byte; construye un array de bytes en lugar de una cadena
br"...", br#"..."#, br##"..."##, etc.Literal de tipo String sin procesar, combinación de literal de tipo String y literal de tipo byte
'...'Literal de tipo caracter
b'...'Literal de tipo byte ASCII
|...| exprClausura
!Tipo de dato vacío siempre vacío para funciones divergentes
_“Ignored” patrón de enlace; también se usa para hacer que los literales enteros sean legibles

Tabla B-3 muestra los símbolos que aparecen en el contexto de un camino a través del módulo de la jerarquía para un elemento.

Tabla B-3: Sintaxis relacionado a Rutas

SímbolosExplicación
ident::identNamespace path
::pathPath relative to the crate root (i.e., an explicitly absolute path)
self::pathPath relative to the current module (i.e., an explicitly relative path)
super::pathPath relative to the parent of the current module
type::ident, <type as trait>::identAssociated constants, functions, and types
<type>::...Associated item for a type that cannot be directly named (e.g., <&T>::..., <[T]>::..., etc.)
trait::method(...)Disambiguating a method call by naming the trait that defines it
type::method(...)Disambiguating a method call by naming the type for which it’s defined
<type as trait>::method(...)Disambiguating a method call by naming the trait and type

Tabla B-4 muestra los símbolos que aparecen en el contexto de usar parámetros de tipo genérico.

Tabla B-4: Genericos

SímbolosExplicación
path<...>Especifica parámetros de tipo genérico en un tipo (por ejemplo, Vec<u8>)
path::<...>, method::<...>Especifica parámetros de tipo genérico, función o método en una expresión; a menudo se refiere como pez espada (por ejemplo, "42".parse::<i32>())
fn ident<...> ...Define una función genérica
struct ident<...> ...Define una estructura genérica
enum ident<...> ...Define una enumeración genérica
impl<...> ...Define una implementación genérica
for<...> typeLímites de vida de rango superior
type<ident=type>Un tipo genérico donde uno o más tipos asociados tienen asignaciones específicas (por ejemplo, Iterator<Item=T>)

Tabla B-5 muestra los símbolos que aparecen en el contexto de restringir parámetros de tipo genérico con límites de tipo.

Tabla B-5: Restricciones de tipo

SimbolosExplicación
T: UParámetro de tipo genérico T restringido a tipos que implementan U
T: 'aTipo genérico T debe sobrevivir al tiempo de vida 'a (es decir, el tipo no puede contener de forma transitiva referencias con tiempos de vida más cortos que 'a)
T: 'staticTipo genérico T no contiene referencias prestadas, excepto las de 'static
'b: 'aTiempo de vida genérico 'b debe sobrevivir al tiempo de vida 'a
T: ?SizedPermitir que el parámetro de tipo genérico sea un tipo de tamaño dinámico
'a + trait, trait + traitRestricción de tipo compuesta

Tabla B-6 muestra los símbolos que aparecen en el contexto de llamar o definir macros y especificar atributos en un elemento.

Tabla B-6: Macros y Atributos

SímbolosExplicación
#[meta]Atributo externo
#![meta]Atributo interno
$identSustitución de macro
$ident:kindCaptura de macro
$(...)...Repetición de macro
ident!(...), ident!{...}, ident![...]Invocación de macro

Tabla B-7 muestra los símbolos que crean comentarios.

Tabla B-7: Comentarios

SímbolosExplicación
//Comentario de línea
//!Comentario de línea de documentación interna
///Comentario de línea de documentación externa
/*...*/Comentario de bloque
/*!...*/Comentario de bloque de documentación interna
/**...*/Comentario de bloque de documentación externa

Tabla B-8 muestra los símbolos que aparecen en el contexto de usar tuplas.

Tabla B-8: Tuplas

SímbolosExplicación
()Tupla vacía (también conocida como unidad), tanto literal como tipo
(expr)Expresión entre paréntesis
(expr,)Expresión de tupla de un solo elemento
(type,)Tipo de tupla de un solo elemento
(expr, ...)Expresión de tupla
(type, ...)Tipo de tupla
expr(expr, ...)Expresión de llamada de función; también se usa para inicializar structs de tupla y variantes de enum de tupla
expr.0, expr.1, etc.Índice de tupla

Tabla B-9 muestra los contextos en los que se usan las llaves.

Tabla B-9: Llaves

ContextoExplicación
{...}Expresión de bloque
Type {...}Literal de struct

Tabla B-10 muestra los contextos en los que se usan los corchetes.

Tabla B-10: Corchetes

ContextoExplicación
[...]Expresión de arreglo
[type; expr]Arreglo de tipo y tamaño
expr[expr]Índice de colección. Sobrecargable (Index, IndexMut)
expr[..], expr[a..], expr[..b], expr[a..b]Índice de colección fingiendo ser recortes de colección, usando Range, RangeFrom, RangeTo, o RangeFull como el “índice”