RustでFizzBuzz
何回目なのか分からない
使ったバージョン
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
と書くようになった。