Anhang B: Operatoren und Symbole

Dieser Anhang enthält ein Glossar der Rust-Syntax, einschließlich Operatoren und anderer Symbole, die allein oder im Zusammenhang mit Pfaden, generischen Datentypen (generics), Merkmalsabgrenzungen (trait bounds), Makros, Attributen, Kommentaren, Tupeln und Klammern auftreten.

Operatoren

Tabelle B-1 enthält die Operatoren in Rust, ein Beispiel, wie der Operator im Kontext erscheinen würde, eine kurze Erklärung und ob dieser Operator überladen werden kann. Wenn ein Operator überladen werden kann, wird das relevante Merkmal (trait) aufgeführt, mit dem dieser Operator überladen werden kann.

Tabelle B-1: Operatoren

OperatorBeispielErklärungÜberladbar?
!ident!(...),
ident!{...},
ident![...]
Makro-Expansion
!!exprBitweises oder logisches KomplementNot
!=expr != exprVergleich auf UngleichheitPartialEq
%expr % exprArithmetischer RestbetragRem
%=var %= exprArithmetischer Restbetrag und ZuweisungRemAssign
&&expr,
&mut expr
Ausleihe
&&type,
&mut type,
&'a type,
&'a mut type
Ausleih-Referenz-Typ
&expr & exprBitweises UNDBitAnd
&=var &= exprBitweises UND und ZuweisungBitAndAssign
&&expr && exprLogisches UND mit Kurzschlussauswertung
*expr * exprArithmetische MultiplikationMul
*=var *= exprArithmetische Multiplikation und ZuweisungMulAssign
**exprDereferenzierungDeref
**const type,
*mut type
Roh-Referenz
+trait + trait,
'a + trait
Verbundtypabgrenzung
+expr + exprArithmetische AdditionAdd
+=var += exprArithmetische Addition und ZuweisungAddAssign
,expr, exprArgument- und Elementseparator
-- exprArithmetische NegationNeg
-expr - exprArithmetische SubtraktionSub
-=var -= exprArithmetische Subtraktion und ZuweisungSubAssign
->fn(...) -> type,
|...| -> type
Funktion und Funktionsabschlussrückgabetyp
.expr.identElementzugriff
....,
expr..,
..expr,
expr..expr
Rechts-ausschließendes BereichsliteralPartialOrd
..=..=expr,
expr..=expr
Rechts-einschließendes BereichsliteralPartialOrd
....exprAktualisierungssyntax für Strukturliterale
..variant(x, ..),
struct_type { x, .. }
„Und der Rest“-Musterbindung
...expr...expr(Veraltet, verwende stattdessen ..=) In einem Muster: inklusives Bereichsmuster
/expr / exprArithmetische DivisionDiv
/=var /= exprArithmetische Division und ZuweisungDivAssign
:pat: type,
ident: type
Typabgrenzung
:ident: exprStruktur-Feld-Initialisierer
:'a: loop {...}Schleifen-Label
;expr;Anweisungs- und Element-Endezeichen
;[...; len]Syntaxteil für Array fester Größe
<<expr << exprBitweise Links-SchiebungShl
<<=var <<= exprBitweise Links-Schiebung und ZuweisungShlAssign
<expr < exprKleiner-als-VergleichPartialOrd
<=expr <= exprKleiner-gleich-VergleichPartialOrd
=var = expr,
ident = type
Zuweisung/Äquivalenz
==expr == exprGleichheitsvergleichPartialEq
=>pat => exprTeilsyntax im Abgleichs-Zweig (match arm)
>expr > exprGrößer-als-VergleichPartialOrd
>=expr >= exprGrößer-gleich-VergleichPartialOrd
>>expr >> exprBitweise Rechts-SchiebungShr
>>=var >>= exprBitweise Rechts-Schiebung und ZuweisungShrAssign
@ident @ patMuster-Bindung
^expr ^ exprBitweises exklusives ODERBitXor
^=var ^= exprBitweises exklusives ODER und ZuweisungBitXorAssign
|pat | patMuster-Alternativen
|expr | exprBitweises ODERBitOr
|=var |= exprBitweises ODER und ZuweisungBitOrAssign
||expr || exprLogisches ODER mit Kurzschlussauswertung
?expr?Fehler-Weitergabe

Nicht-Operator-Symbole

Die folgende Liste enthält alle Symbole, die nicht als Operatoren fungieren, d.h. sich nicht wie ein Funktions- oder Methodenaufruf verhalten.

Tabelle B-2 zeigt Symbole, die für sich allein stehen und an verschiedenen Stellen gültig sind.

Tabelle B-2: Eigenständige Syntax

SymbolErklärung
'identBenannte Lebensdauer oder Schleifenbeschriftung
...u8,
...i32,
...f64,
...usize
usw.
Numerisches Literal eines bestimmten Typs
"..."Zeichenketten-Literal
r"...",
r#"..."#,
r##"..."##
usw.
Roh-Zeichenketten-Literal, Escape-Zeichen werden nicht verarbeitet
b"..."Byte-Zeichenkettenliteral, erzeugt ein Byte-Array anstelle einer Zeichenkette
br"...",
br#"..."#,
br##"..."##
usw.
Roh-Byte-Zeichenkettenliteral, Kombination aus Roh- und Byte-Zeichenkettenliteral
'...'Zeichen-Literal
b'...'ASCII-Byte-Literal
|...| exprFunktionsabschluss (closure)
!Leerer Typ (bottom type) für nicht-endende Funktionen
_Musterbindung für „sonstige“; wird auch verwendet, um Ganzzahl-Literale lesbar zu machen

Tabelle B-3 zeigt Symbole, die im Zusammenhang mit Pfaden für die Modulhierarchie eines Elements vorkommen.

Tabelle B-3: Pfad-bezogene Syntax

SymbolErklärung
ident::identNamensraum-Pfad
::pathPfad relativ zur Kistenwurzel
(d.h. ein explizit absoluter Pfad)
self::pathPfad relativ zum aktuellen Modul
(d.h. ein explizit relativer Pfad)
super::pathPfad relativ zum Elternmodul
type::ident,
<type as trait>::ident
Zugehörige Konstanten, Funktionen
und Typen
<type>::...Zugehöriges Element für einen Typ,
der nicht direkt benannt werden kann
(z.B. <&T>::..., <[T]>:::... usw.)
trait::method(...)Methodenaufruf durch Angeben des
Merkmals eindeutig machen
type::method(...)Methodenaufruf durch Angeben des
Typs eindeutig machen
<type as trait>::method(...)Methodenaufruf durch Angeben des
Merkmals und Typs eindeutig machen

Tabelle B-4 zeigt Symbole, die im Zusammenhang mit generischen Typparametern auftreten.

Tabelle B-4: Generische Datentypen

SymbolErklärung
path<...>Spezifiziert Parameter zum generischen Typ in einem Typ (z.B. Vec<u8>)
path::<...>,
method::<...>
Spezifiziert Parameter zu einem generischen Typ, einer Funktion oder Methode in einem Ausdruck; oft als „turbofish“ bezeichnet (z.B. "42".parse::<i32>())
fn ident<...> ...Generische Funktion definieren
struct ident<...> ...Generische Struktur definieren
enum ident<...> ...Generische Aufzählung definieren
impl<...> ...Generische Implementierung definieren
for<...> typeHöherstufige Lebensdauerbegrenzungen
type<ident=type>Generischer Typ, bei dem ein oder mehrere assoziierte Typen bestimmte Zuordnungen haben (z.B. Iterator<Item=T>)

Tabelle B-5 zeigt Symbole, die im Zusammenhang mit generischen Typparametern mit Merkmalsabgrenzung (trait bounds) auftreten.

Tabelle B-5: Merkmalsabgrenzungen

SymbolErklärung
T: UGenerischer Parameter T, beschränkt auf Typen,
die U implementieren
T: 'aGenerischer Typ T, der die Lebensdauer 'a überdauert
(d.h. der Typ darf transitiv keine Referenzen mit einer
kürzeren Lebensdauer als 'a enthalten)
T: 'staticGenerischer Typ T mit Lebensdauer 'static
'b: 'aGenerische Lebensdauer 'b, muss Lebensdauer 'a überdauern
T: ?SizedErlaube einen generischen Typparameter, der ein
dynamisch dimensionierter Typ ist
'a + trait,
trait + trait
Zusammengesetzte Typabgrenzung

Tabelle B-6 zeigt Symbole, die im Zusammenhang mit dem Aufruf oder der Definition von Makros und der Angabe von Attributen an einem Element vorkommen.

Tabelle B-6: Makros und Attribute

SymbolErklärung
#[meta]Äußeres Attribut
#![meta]Inneres Attribut
$identMakro-Ersetzung
$ident:kindMakro-Erfassung
$(…)…Makro-Wiederholung
ident!(...),
ident!{...},
ident![...]
Makro-Aufruf

Tabelle B-7 zeigt Symbole, die Kommentare erzeugen.

Tabelle B-7: Kommentare

SymbolErklärung
//Einzeiliger Kommentar
//!Einzeiliger Dokumentationskommentar innen
///Einzeiliger Dokumentationskommentar außen
/*...*/Block-Kommentar
/*!...*/Mehrzeiliger Dokumentationskommentar innen
/**...*/Mehrzeiliger Dokumentationskommentar außen

Tabelle B-8 zeigt Symbole, die im Zusammenhang mit der Verwendung von Tupeln auftreten.

Tabelle B-8: Tupel

SymbolErklärung
()Leeres Tupel (auch Einheit (unit) genannt), Literal und Typ
(expr)Eingeklammerter Ausdruck
(expr,)Ein-Element-Tupel-Ausdruck
(type,)Ein-Element-Tupel-Typ
(expr, ...)Tupel-Ausdruck
(type, ...)Tupel-Typ
expr(expr, ...)Funktionsaufruf-Ausdruck; wird auch zur Initialisierung von Tupel-Strukturen und Tupel-Aufzählungs-Varianten verwendet
expr.0,
expr.1 usw.
Tupel-Indexierung

Tabelle B-9 zeigt die Kontexte, in denen geschweifte Klammern verwendet werden.

Tabelle B-9: Geschweifte Klammern

ContextErklärung
{...}Block-Ausdruck
Type {...}struct-Literal

Tabelle B-10 zeigt die Kontexte, in denen eckige Klammern verwendet werden.

Tabelle B-10: Eckige Klammern

ContextErklärung
[...]Array-Literal
[expr; len]Array-Literal mit len Kopien von expr
[type; len]Array-Typ mit len Instanzen von type
expr[expr]Sammlungs-Indexierung, ist überladbar (Index, IndexMut)
expr[..],
expr[a..],
expr[..b],
expr[a..b]
Sammlungs-Indexierung, die wie ein Sammlungsanteil aussieht, unter Verwendung von Range, RangeFrom, RangeTo oder RangeFull als „Index“