その他

【Rust】matchについて

その他
この記事は約2分で読めます。

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),
}