Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

付録B: 演算子と記号

この付録には、Rust の構文の用語集として、演算子やその他の記号を収録しています。これらの記号は、単独で現れる場合もあれば、パス、ジェネリクス、トレイト境界、マクロ、属性、コメント、タプル、括弧の文脈で現れる場合もあります。

演算子

表B-1には、Rust における演算子、その演算子が文脈の中でどのように現れるかの例、簡単な説明、その演算子がオーバーロード可能かどうかが示されています。演算子がオーバーロード可能な場合は、その演算子をオーバーロードするために使用する対応するトレイトも記載されています。

表B-1: 演算子

演算子説明オーバーロード可能?
!ident!(...), ident!{...}, ident![...]マクロ展開
!!exprビット単位または論理補数Not
!=expr != 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
*=var *= expr算術乗算と代入MulAssign
**expr逆参照Deref
**const type, *mut type生ポインタ
+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.ident(expr, ...)メソッド呼び出し
.expr.0, expr.1, and so onタプルのインデックス指定
...., expr.., ..expr, expr..expr右端を含まない範囲リテラルPartialOrd
..=..=expr, expr..=expr右端を含む範囲リテラルPartialOrd
....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ビット単位排他的 ORBitXor
^=var ^= exprビット単位排他的 OR と代入BitXorAssign
|pat | patパターンの代替
|expr | exprビット単位 ORBitOr
|=var |= exprビット単位 OR と代入BitOrAssign
||expr || expr短絡論理 OR
?expr?エラー伝播

演算子ではない記号

以下の表には、演算子として機能しないすべての記号、つまり関数呼び出しやメソッド呼び出しのように振る舞わない記号が含まれています。

表B-2は、単独で現れ、さまざまな場所で有効な記号を示しています。

表B-2: 単独で現れる構文

記号説明
'ident名前付きライフタイムまたはループラベル
直後に u8i32f64usize などが続く数字特定の型の数値リテラル
"..."文字列リテラル
r"...", r#"..."#, r##"..."## など生文字列リテラル。エスケープ文字は処理されない
b"..."バイト文字列リテラル。文字列ではなくバイト配列を構築する
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ジェネリック型 T はライフタイム 'a より長く存続しなければならない(つまり、その型は推移的に 'a より短いライフタイムを持つ参照を含んではならない)
T: 'staticジェネリック型 T'static 以外の借用参照を含まない
'b: 'aジェネリックライフタイム 'b はライフタイム 'a より長く存続しなければならない
T: ?Sizedジェネリック型パラメータが動的サイズ型であることを許可する
'a + trait, trait + trait複合型制約

表B-6は、マクロの呼び出しまたは定義の文脈、および アイテムに属性を指定する文脈で現れる記号を示しています。

表B-6: マクロと属性

記号説明
#[meta]外側属性
#![meta]内側属性
$identマクロ置換
$ident:kindマクロメタ変数
$(...)...マクロ繰り返し
ident!(...), ident!{...}, ident![...]マクロ呼び出し

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

表B-7: コメント

記号説明
//行コメント
//!内側の行ドキュメントコメント
///外側の行ドキュメントコメント
/*...*/ブロックコメント
/*!...*/内側のブロックドキュメントコメント
/**...*/外側のブロックドキュメントコメント

表B-8は、丸かっこが使用される文脈を示しています。

表B-8: 丸かっこ

記号説明
()空のタプル(別名ユニット)。リテラルと型の両方
(expr)丸かっこで囲まれた式
(expr,)単一要素のタプル式
(type,)単一要素のタプル型
(expr, ...)タプル式
(type, ...)タプル型
expr(expr, ...)関数呼び出し式。タプル struct およびタプル enum バリアントの初期化にも使用される

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

表B-9: 波かっこ

コンテキスト説明
{...}ブロック式
Type {...}構造体リテラル

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

表B-10: 角かっこ

コンテキスト説明
[...]配列リテラル
[expr; len]expr のコピーを len 個含む配列リテラル
[type; len]type の要素を len 個含む配列型
expr[expr]コレクションの添字アクセス。オーバーロード可能(Index, IndexMut
expr[..], expr[a..], expr[..b], expr[a..b]コレクションのスライスのように見えるコレクション添字アクセスで、「インデックス」として RangeRangeFromRangeTo、または RangeFull を使用する