C/C++にあるswitch文の上位互換みたいなやつ。
成果物
参考
- https://doc.rust-jp.rs/book/second-edition/ch06-01-defining-an-enum.html
- https://doc.rust-jp.rs/book/second-edition/ch18-03-pattern-syntax.html
コード
match(enum)
fn main() { println!("{}", value_in_cents(Coin::Penny)); println!("{}", value_in_cents(Coin::Nickel)); println!("{}", value_in_cents(Coin::Dime)); println!("{}", value_in_cents(Coin::Quarter)); } fn value_in_cents(coin: Coin) -> u32 { match coin { Coin::Penny => { println!("Lucky penny !!"); 1 }, Coin::Nickel => 5, Coin::Dime => 10, Coin::Quarter => 25, } } enum Coin { Penny, Nickel, Dime, Quarter, }
enum型の値に応じて分岐。
他言語でいうswitch文, case文のようなもの。
match(名前付き変数)
fn main() { println!("{}", value_in_cents(Coin::Penny)); println!("{}", value_in_cents(Coin::Nickel)); println!("{}", value_in_cents(Coin::Dime)); println!("{}", value_in_cents(Coin::Quarter(UsState::Alabama))); println!("{}", value_in_cents(Coin::Quarter(UsState::Alaska))); } fn value_in_cents(coin: Coin) -> u32 { match coin { Coin::Penny => 1, Coin::Nickel => 5, Coin::Dime => 10, Coin::Quarter(state) => { println!("{:?}", state); 25 }, } } #[derive(Debug)] enum UsState { Alabama, Alaska, } enum Coin { Penny, Nickel, Dime, Quarter(UsState), }
match
文でのCoin::Quarter(state)
におけるstate
は、enum型Coin
のQuarter(UsState)
定義におけるUsState
型の値をとる。
OR|
, 範囲(...
), 他_
fn main() { let value = 3; match value { 0 => println!("zero"), 1 => println!("one"), 2 | 3 => println!("two or three"), 4 ... 9 => println!("four ... nine"), _ => (), // 上記以外のときは`_`で示す。`()`は何もしない。 } }
|
で OR演算。2 | 3
で2か3のいずれかに一致すればマッチ...
で範囲。4 ... 9
で4
〜9
の範囲にある値いずれかであればマッチ_
でそれ以外。C/C++のswitch文におけるdefault:
とおなじ。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
$ uname -a Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux
前回まで
- Rustを学んでみたい(プログラミング言語)
- Rustの環境構築
- RustでHelloWorld
- Rustの和訳ドキュメント
- Cargoでプロジェクト作成・ビルド・実行
- クレートとは?
- Rustで関数を使ってみる
- Rustでモジュールを使ってみる
- Rustで乱数を生成する(rand)
- Rustで標準入力する(std::io::stdin().read_line())
- RustでMatch判定する(match)
- Rustでprintとread_lineを1行にする方法
- Rustで数当てゲーム
- クレート名にドット.が使えない
- Rustの変数と可変性(let, mut) error[E0384]: cannot assign twice to immutable variable
x
- Rustのimmutable束縛とconst定数の違い
- RustのREPL、evcxrのインストールに失敗した
- Rustでコンパイルするときの変数未使用warningを消す
- Rustの変数(再代入、再宣言(シャドーイング))
- Rustのシャドーイングについて
- イミュータブルについて(副作用)
- Rustの定数(const)
- Rustのデータ型(数値)
- Rustのデータ型(論理)
- Rustのデータ型(文字)
- Rustのデータ型(タプル)
- Rustのデータ型(配列)
- Rustの関数
- Rustのif式
- Rustのくりかえし文(loop)
- Rustのくりかえし文(while)
- Rustのくりかえし文(for)
- Rustの所有権(ムーブ)
- Rustの所有権(関数)
- Rustの所有権(スライス)
- Rustの構造体(定義とインスタンス化)
- Rustの構造体(プログラム例)
- Rustの構造体(メソッド)
- Rustの列挙型(enum)