t_wの輪郭

Feedlyでフォローするボタン
比較Rustif式std::cmp::Orderingstd::cmpOrderingif文

match

2022/2/19 13:51:00

Rustで比較するときに使うやつ

if文じゃないんだ…… → if式はあることが判明した。

match val1.cmp(&val2) {
    Ordering::Less => println!("Too small!"),
    Ordering::Greater => println!("Too big!"),
    Ordering::Equal => println!("You win!"),
}
HashMapの値を取得std::cmp::Orderingmatchの途中放棄(elseみたいなことをする)Enumを使うとベクタに複数の型を保持できるRustのenumとmatch

HashMapの値を取得

2022/2/19 18:38:00
let key = String::from("Blue");
let value = hashmap.get(&key);              //Option<&V>を返してくる

match value {                               //直接printlnできないのでmatchを使う
    Some(v) => println!("{}", v),
    None => (),                             //Noneが返ってくる場合も記述する必要がある(ないとコンパイルエラーが発生する)
}

if let Some(v) = value {                    //matchの代わりにif letを使うこともできる
    println!("{}", v);
}

matchを使う際、enumに列挙子が残っていても、_を使うと残りの処理を担わせることができる。_ => ()と書けば、何もしないをできる。

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

fn main() {
    let message = Message::Move{x:0, y:10};
    match message {
        Message::Move {x,y} => println!("Move(x:{},y:{})", x, y),
        _ => (),
    }
}
fn main() {
    enum SpreadsheetCell {
        Int(i32),
        Float(f64),
        Text(String),
    }
    
    let row = vec![
        SpreadsheetCell::Int(3),
        SpreadsheetCell::Text(String::from("blue")),
        SpreadsheetCell::Float(10.12),
    ];

    for r in &row {
        match r {
            SpreadsheetCell::Int(i) => println!("{}", i),
            SpreadsheetCell::Text(s) => println!("{}", s),
            SpreadsheetCell::Float(f) => println!("{}", f),
        }
    }
}
3
blue
10.12

https://doc.rust-jp.rs/book-ja/ch08-01-vectors.html#enumを使って複数の型を保持する

Rustのenumとmatch

2022/2/18 19:40:00
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

fn main() {
    let message = Message::Move{x:0, y:10};
    match message {
        Message::Quit => println!("Quit"),
        Message::Move {x,y} => println!("Move(x:{},y:{})", x, y),
        Message::Write (s) => println!("Write({})", s),
        Message::ChangeColor (r, g, b) => println!("ChangeColor({}, {}, {}", r, g, b),
    }
}