Rust のアンラップとその使用方法
この記事では、unwrap
と Rust でのその使用法について説明します。
Rust における unwrap
について
Rust では、何かを unwrap
するということは、次のコマンドを発行することを意味します。計算の結果を教えてください。エラーが発生した場合は、パニックになってプログラムを停止してください。
アンラッピングは非常に単純なプロセスであるため、そのコードを示すことは有益です。
ただし、その前に、Option
タイプと Result
タイプを調査する必要があります。
Option
タイプ
Option
タイプは、Rust のタイプシステムを使用して欠席の可能性を表現する方法です。欠席の可能性を型システムにエンコードすることは、コンパイラーに欠席の処理をプログラマーに強制するため、非常に重要です。
不在の可能性がある場合は、std
ライブラリの Option<T>
という名前の enum
が使用されます。これは、2つの Option
のいずれかの形式を取ります。
Some(T)
- タイプT
の要素が識別されました。None
- 要素が検出されませんでした。
これらの状況は、match
を明示的または暗黙的に unwrap
を使用して処理できます。暗黙的な処理は、内部要素または panic
のいずれかを返します。
構文:
enum Option<T> {
None,
Some(T),
}
ファイル名の拡張子を見つける例:
fn find(haystack: &str, words: char) -> Option<usize> { haystack.find(words) }
fn main() {
let name_of_file = "file.doc";
match find(name_of_file, '.') {
None => println!("Extension could not be found."),
Some(i) => println!("The extension of file is: {}", &name_of_file[i+1..]),
}
}
出力:
The extension of file is: doc
panic
は expect
を使用して手動でカスタマイズできますが、unwrap
は明示的な処理よりも関連性の低い出力を生成することに注意してください。以下の例では、明示的な処理により、必要に応じて panic
のオプションを維持しながら、より制御された結果が生成されます。
fn adult_man(food: Option<&str>) {
match food {
Some("pasta") => println!("The food does not taste right."),
Some(inner) => println!("{}? It could be nice.", inner),
None => println!("No good food? Nevertheless."),
}
}
fn food(food: Option<&str>) {
let interior = food.unwrap();
if interior == "pasta" { panic!("Ummmmmm!!!!"); }
println!("I am glad to have {}s!!!!!", interior);
}
fn main() {
let bruschetta = Some("Bruschetta");
let pasta = Some("pasta");
let void = None;
adult_man(bruschetta);
adult_man(pasta);
adult_man(void);
let spaghetti = Some("spaghetti");
let nothing = None;
food(spaghetti);
food(nothing);
}
すべての食品は、最初に上記のコードの match
を使用して明示的に処理されます。
すべての食品は、セクション機能に unwrap
を使用して暗黙的に処理されます。unwrap
は、none
を受信すると panic
を返します。
出力:
Bruschetta? It could be nice.
The food does not taste right.
No good food? Nevertheless.
I am glad to have spaghettis!!!!!
Result
タイプ
Result
は Option
のより堅牢なバージョンです。欠席の可能性を表す Option
とは異なり、Result
はエラーの可能性を表します。
エラーは通常、計算の実行が失敗した理由を示すために使用されます。これは、Option
という単語の一般化された形式です。
構文:
enum Result<T, E> {
Ok(T),
Err(E),
}