付録A: キーワード
以下の一覧には、Rust言語において現在または将来の使用のために予約されて いるキーワードが含まれています。そのため、これらは識別子として使用できません(ただし、 「生の 識別子」 の節で説明するように、生の識別子として使用する場合を除きます)。識別子 とは、 関数、変数、パラメータ、struct フィールド、モジュール、クレート、定数、 マクロ、static 値、属性、型、トレイト、またはライフタイムの名前です。
現在使用されているキーワード
以下は、現在使用されているキーワードと、その機能の説明の一覧です。
as: プリミティブ型へのキャストを行い、項目を含む特定のトレイトを 明確化し、またはuse文で項目の名前を変更する。async: 現在のスレッドをブロックする代わりにFutureを返す。await:Futureの結果が準備できるまで実行を一時停止する。break: ループを即座に抜ける。const: 定数アイテムまたは定数生ポインタを定義する。continue: 次のループ反復に進む。crate: モジュールパスにおいて、クレートルートを指す。dyn: トレイトオブジェクトへの動的ディスパッチ。else:ifおよびif letの制御フロー構文におけるフォールバック。enum: 列挙型を定義する。extern: 外部関数または外部変数をリンクする。false: ブール値の偽リテラル。fn: 関数または関数ポインタ型を定義する。for: イテレータから項目を反復処理し、トレイトを実装し、または 高ランクのライフタイムを指定する。if: 条件式の結果に基づいて分岐する。impl: 固有の機能またはトレイトの機能を実装する。in:forループ構文の一部。let: 変数を束縛する。loop: 無条件にループする。match: 値をパターンに照合する。mod: モジュールを定義する。move: クロージャがキャプチャしたすべての値の所有権を取るようにする。mut: 参照、生ポインタ、またはパターン束縛における可変性を示す。pub: struct フィールド、implブロック、または モジュールにおける公開可視性を示す。ref: 参照によって束縛する。return: 関数から戻る。Self: 定義または実装している型を表す型エイリアス。self: メソッドの対象、または現在のモジュール。static: プログラムの実行全体にわたって存続するグローバル変数または ライフタイム。struct: 構造体を定義する。super: 現在のモジュールの親モジュール。trait: トレイトを定義する。true: ブール値の真リテラル。type: 型エイリアスまたは関連型を定義する。union: 共用体 を定義する。union宣言で使用される場合にのみキーワードである。unsafe: unsafe なコード、関数、トレイト、または実装を示す。use: シンボルをスコープに導入する。where: 型を制約する句を示す。while: 式の結果に基づいて条件付きでループする。
将来の使用のために予約されているキーワード
以下のキーワードにはまだ何の機能もありませんが、将来使用される可能性に備えて Rust によって予約されています。
abstractbecomeboxdofinalgenmacrooverrideprivtrytypeofunsizedvirtualyield
生の識別子
生の識別子 とは、通常であれば使えない場所でキーワードを使えるようにする構文です。
生の識別子は、キーワードの先頭に r# を付けて使用します。
たとえば、match はキーワードです。match を名前として使う次の関数を
コンパイルしようとすると:
ファイル名: src/main.rs
fn match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
次のエラーが表示されます:
error: expected identifier, found keyword `match`
--> src/main.rs:4:4
|
4 | fn match(needle: &str, haystack: &str) -> bool {
| ^^^^^ expected identifier, found keyword
このエラーが示しているとおり、キーワード match は関数の識別子として
使用できません。match を関数名として使うには、次のように生の
識別子構文を使う必要があります:
ファイル名: src/main.rs
fn r#match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
fn main() {
assert!(r#match("foo", "foobar"));
}
このコードはエラーなしでコンパイルできます。関数の定義時の名前だけでなく、
main でその関数を呼び出している箇所でも、関数名に r# プレフィックスが
付いていることに注目してください。
生の識別子を使うと、たまたまその語が予約キーワードであっても、好きな語を
識別子として使うことができます。これにより、識別子名を選ぶ自由度が増すだけでなく、
こうした語がキーワードではない言語で書かれたプログラムと連携することもできます。
さらに、生の識別子を使うと、あなたのクレートが使っているものとは異なる Rust
エディションで書かれたライブラリを使うこともできます。たとえば、try は 2015
edition ではキーワードではありませんが、2018、2021、
および 2024 editions ではキーワードです。2015
edition を使って書かれ、try 関数を持つライブラリに依存している場合、
後の editions でその関数を自分のコードから呼び出すには、この場合は r#try である
生の識別子構文を使う必要があります。エディションの詳細については、
付録E を参照してください。