vecの数字からmaxを取り出す。

今回はここを参考に「Rust-101, Part 00: Algebraic datatypes

実装

main.rs

enum NumberOrNothing {
    Number(i32),
    Nothing
}

fn vec_max(vec: Vec<i32>) -> NumberOrNothing {
    let mut max = NumberOrNothing::Nothing;
    for el in vec {
        match max {
            NumberOrNothing::Nothing => {
                max = NumberOrNothing::Number(el);
            },
            NumberOrNothing::Number(n) => {
                let new_max = max_i32(n, el);
                max = NumberOrNothing::Number(new_max);
            }
        };
    }
    return max;
}

fn max_i32(a: i32, b: i32) -> i32 {
    if a > b {
        return a;
    } else {
        return b;
    }
}

use self::NumberOrNothing::{Number, Nothing};

fn read_vec() -> Vec<i32> {
    vec![3, 4, 12, 8, 22]
}

fn print_number_or_nothing(n: NumberOrNothing) {
    match n {
        Nothing => println!("nothing"),
        Number(n) => println!("number {}", n),
    };
}

pub fn main() {
    let vec = read_vec();
    let max = vec_max(vec);
    print_number_or_nothing(max);
}

コンパイル

rustc 叩くだけだけ。(環境用意するの面倒なので、docker使ってます。)

docker run --rm -it -v $PWD:/usr/src -w /usr/src rustlang/rust:nightly rustc /usr/src/max.rs

動作確認

出来上がった「max」を叩くだけ。(環境用意するの面倒なので、docker使ってます。)

docker run --rm -it -v $PWD:/usr/src -w /usr/src rustlang/rust:nightly /usr/src/max

number 22

ってでればOK.