RustでFizzBuzz

何回目なのか分からない

前回


Rust 0.10でFizzBuzz - M59のブログ

使ったバージョン

rustc 0.13.0-dev (b497f0500 2014-12-16 01:32:33 +0000)

コード

fn main() {
    let n = 100u;
    let (tx, rx) = channel();
    for i in range(0, n) {
        let tx = tx.clone();
        spawn(move || {
            let i = i + 1;
            let b = match (i % 3, i % 5) {
                (0, 0) => "FizzBuzz".into_cow(),
               	(0, _) => "Fizz".into_cow(),
                (_, 0) => "Buzz".into_cow(),
                _      => i.to_string().into_cow()
            };
            tx.send((i, b));
        });
    }

    let mut res = Vec::new();
    for _ in range(0, n) {
        res.push(rx.recv());
    }

    res.sort_by(|t, u| (&t.0).cmp(&u.0));
    for t in res.iter() {
        println!("{}", (&t.1).as_slice());
    }
}

前回からの変更点

  • channelの型を書かなくて良くなった。
  • proc() {}はdeprecated。move || {}を使う。
  • range(0, 100) だと型が決まらなくてダメ。100uと明示的に書く。
  • ついでに反復回数は変数 n に代入することにした。(本質的でない変更)
  • MaybeOwnedはdeprecatedなのでcollections::str::CowStringを使う。Cowは牛じゃなくてcopy-on-writeclone-on-write
  • i.to_str()からi.to_string()に。
  • t.ref0()じゃなくて&t.0と書くようになった。