Resultのハンドリング
Result型は以下の2つでした。
- Ok
- Err
また、Ok
だけを扱い、Err
でパニック(プログラム強制終了)しても良い場合は、unwrap()
が使用できるのでした。
unwrapはその名の通り、Okの場合の値を取り出して(アンラップして)使用できるようにします。
例
// TcpListener::bind()はResultを返す
let listener = TcpListener::bind(&self.addr).unwrap();
// - Errの場合は強制終了する
Errの場合もパニックしないよう実装するにはmatch
を使用します。
match
match
は可能性のある全ての場合をカバーするコードを書くことを強制します。例えばResult型であれば、
- Ok
- Err
の2つの場合についてもれなく実装を行わないとコンパイルできません。
match listener.accept() {
Ok((_socket, addr)) => println!("new client: {:?}", addr),
Err(e) => println!("couldn't get client: {:?}", e),
}
引数の値を使用しない場合
各マッチャの引数には、必ず可能性のある引数を入れなければコンパイルできません。
使用しない引数がある場合には、アンダースコアをつけることで無視できます。
match listener.accept() {
Ok((_socket, addr)) => println!("new client: {:?}", addr),
Err(e) => println!("couldn't get client: {:?}", e),
}