付録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 ビットAND BitAnd
&= 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 => expr matchアーム記法の一部
> expr > expr より大きい比較 PartialOrd
>= expr >= expr 以上比較 PartialOrd
>> expr >> expr 右シフト Shr
>>= var >>= expr 右シフト後に代入 ShrAssign
@ ident @ pat パターン束縛
^ expr ^ expr ビットXOR BitXor
^= var ^= expr ビットXOR後に代入 BitXorAssign
| pat | pat パターンOR
| |…| expr クロージャ
| expr | expr ビットOR BitOr
|= 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: U Uを実装する型に制約されるジェネリック引数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: タプル

シンボル 説明
() 空のタプル (unitとしても知られる)、リテラル、型両方
(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を「添え字」として使用してコレクション・スライシングの振りをするコレクション添え字アクセス