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.