付録B: 演算子と記号

この付録は、演算子や、単独で現れたり、パス、ジェネリクス、トレイト境界、マクロ、属性、コメント、タプル、 かっこの文脈で現れる他の記号を含むRustの記法の用語集を含んでいます。

演算子

表B-1は、Rustの演算子、演算子が文脈で現れる例、短い説明、その演算子がオーバーロード可能かどうかを含んでいます。 演算子がオーバーロード可能ならば、オーバーロードするのに使用する関係のあるトレイトも列挙されています。

表B-1: 演算子

演算子説明オーバーロードできる?
!ident!(...), ident!{...}, ident![...]マクロ展開
!!exprビット反転、または論理反転Not
!=var != expr非等価比較PartialEq
%expr % expr余り演算Rem
%=var %= expr余り演算後に代入RemAssign
&&expr, &mut expr借用
&&type, &mut type, &'a type, &'a mut type借用されたポインタ型
&expr & exprビットANDBitAnd
&=var &= exprビットAND後に代入BitAndAssign
&&expr && expr論理AND
*expr * expr掛け算Mul
**expr参照外し
**const type, *mut type生ポインタ
*=var *= expr掛け算後に代入MulAssign
+trait + trait, 'a + trait型制限の複合化
+expr + expr足し算Add
+=var += expr足し算後に代入AddAssign
,expr, expr引数と要素の区別
-- expr算術否定Neg
-expr - expr引き算Sub
-=var -= expr引き算後に代入SubAssign
->fn(...) -> type, |...| -> type関数とクロージャの戻り値型
.expr.identメンバーアクセス
...., expr.., ..expr, expr..expr未満範囲リテラル
....expr構造体リテラル更新記法
..variant(x, ..), struct_type { x, .. }「残り全部」パターン束縛
...expr...exprパターンで: 以下範囲パターン
/expr / expr割り算Div
/=var /= expr割り算後に代入DivAssign
:pat: type, ident: type型制約
:ident: expr構造体フィールド初期化子
:'a: loop {...}ループラベル
;expr;文、要素終端子
;[...; len]固定長配列記法の一部
<<expr << expr左シフトShl
<<=var <<= expr左シフト後に代入ShlAssign
<expr < expr未満比較PartialOrd
<=expr <= expr以下比較PartialOrd
=var = expr, ident = type代入/等価
==expr == expr等価比較PartialEq
=>pat => exprmatchアーム記法の一部
>expr > exprより大きい比較PartialOrd
>=expr >= expr以上比較PartialOrd
>>expr >> expr右シフトShr
>>=var >>= expr右シフト後に代入ShrAssign
@ident @ patパターン束縛
^expr ^ exprビットXORBitXor
^=var ^= exprビットXOR後に代入BitXorAssign
|pat | patパターンOR
||…| exprクロージャ
|expr | exprビットORBitOr
|=var |= exprビットOR後に代入BitOrAssign
||expr || expr論理OR
?expr?エラー委譲

演算子以外のシンボル

以下のリストは、演算子として機能しない記号全部を含んでいます; つまり、関数やメソッド呼び出しのようには、 振る舞わないということです。

表B-2は、単独で出現し、いろんな箇所で合法になる記号を示しています。

表B-2: スタンドアローン記法

シンボル説明
'ident名前付きのライフタイム、あるいはループラベル
...u8, ...i32, ...f64, ...usizeなど特定の型の数値リテラル
"..."文字列リテラル
r"...", r#"..."#, r##"..."##など生文字列リテラル、エスケープ文字は処理されません
b"..."バイト文字列リテラル、文字列の代わりに[u8]を構築します
br"...", br#"..."#, br##"..."##など生バイト文字列リテラル、生文字列とバイト文字列の組み合わせ
'...'文字リテラル
b'...'ASCIIバイトリテラル
|...| exprクロージャ
!常に発散関数の空のボトム型
_「無視」パターン束縛: 整数リテラルを見やすくするのにも使われる

表B-3は、要素へのモジュール階層を通したパスの文脈で出現する記号を示しています。

表B-3: パス関連記法

シンボル説明
ident::ident名前空間パス
::pathクレートルートに相対的なパス(すなわち、明示的な絶対パス)
self::path現在のモジュールに相対的なパス(すなわち、明示的な相対パス)
super::path現在のモジュールの親モジュールに相対的なパス
type::ident, <type as trait>::ident関連定数、関数、型
<type>::...直接名前付けできない型の関連要素(例, <&T>::..., <[T]>::...など)
trait::method(...)定義したトレイトを名指ししてメソッド呼び出しを明確化する
type::method(...)定義されている型を名指ししてメソッド呼び出しを明確化する
<type as trait>::method(...)トレイト型を名指ししてメソッド呼び出しを明確化する

表B-4は、ジェネリックな型引数の文脈で出現する記号を示しています。

表B-4: ジェネリクス

シンボル説明
path<...>型の内部のジェネリック型への引数を指定する(例、Vec<u8>)
path::<...>, method::<...>式中のジェネリックな型、関数、メソッドへの引数を指定する。しばしばターボ・フィッシュ(turbofish)と称される。(例、"42".parse::<i32>())
fn ident<...> ...ジェネリックな関数を定義する
struct ident<...> ...ジェネリックな構造体を定義する
enum ident<...> ...ジェネリックな列挙型を定義する
impl<...> ...ジェネリックな実装を定義する
for<...> type高階ライフタイム境界
type<ident=type>1つ以上の関連型に代入されたジェネリックな型(例、Iterator<Item=T>)

表B-5は、ジェネリック型引数をトレイト境界で制約する文脈で出現する記号を示しています。

表B-5: トレイト境界制約

シンボル説明
T: UUを実装する型に制約されるジェネリック引数T
T: 'aライフタイム'aよりも長生きしなければならないジェネリック型T(型がライフタイムより長生きするとは、'aよりも短いライフタイムの参照を何も遷移的に含められないことを意味する)
T : 'staticジェネリック型T'staticなもの以外の借用された参照を何も含まない
'b: 'aジェネリックなライフタイム'bがライフタイム'aより長生きしなければならない
T: ?Sizedジェネリック型引数が動的サイズ付け型であることを許容する
'a + trait, trait + trait複合型制約

表B-6は、マクロの呼び出しや定義、要素に属性を指定する文脈で出現する記号を示しています。

表B-6: マクロと属性

シンボル説明
#[meta]外部属性
#![meta]内部属性
$identマクロ代用
$ident:kindマクロキャプチャ
$(…)…マクロの繰り返し

表B-7は、コメントを生成する記号を示しています。

表B-7: コメント

シンボル説明
//行コメント
//!内部行docコメント
///外部行docコメント
/*...*/ブロックコメント
/*!...*/内部ブロックdocコメント
/**...*/外部ブロックdocコメント

タプル

表B-8は、タプルの文脈で出現する記号を示しています。

表B-8: タプル

シンボル説明
()空のタプル (ユニットとしても知られる)、リテラル、型両方
(expr)括弧付きの式
(expr,)1要素タプル式
(type,)1要素タプル型
(expr, ...)タプル式
(type, ...)タプル型
expr(expr, ...)関数呼び出し式; タプルstructやタプルenum列挙子を初期化するのにも使用される
ident!(...), ident!{...}, ident![...]マクロ呼び出し
expr.0, expr.1, などタプル添え字アクセス

表B-9は、波括弧が使用される文脈を表示しています。

表B-9: 波括弧

文脈説明
{...}ブロック式
Type {...}structリテラル

表B-10は、角括弧が使用される文脈を表示しています。

表B-10: 角括弧

文脈説明
[...]配列リテラル
[expr; len]lenexprを含む配列リテラル
[type; len]len個のtypeのインスタンスを含む配列型
expr[expr]コレクション添え字アクセス。オーバーロード可能 (Index, IndexMut)
expr[..], expr[a..], expr[..b], expr[a..b]RangeRangeFromRangeToRangeFullを「添え字」として使用してコレクション・スライシングの振りをするコレクション添え字アクセス