RustのSendStr

RustにはEnum std::send_str::SendStrがあって、これは送信可能な文字列型である~strか&'static strのどちらかを保持する。Trait std::send_str::IntoSendStrのメソッド fn into_send_str(self) -> SendStr を使って、それらをSendStrに変換できる。

例のFizzBuzzで使ってみる。

extern mod extra;

fn main() {
    let (port, chan) = std::comm::SharedChan::new();
    for i in range(0, 100) {
        let chan = chan.clone();
        do spawn {
            let i = i + 1;
            let b = match (i % 3, i % 5) {
                (0, 0) => "FizzBuzz".into_send_str(),
               	(0, _) => "Fizz".into_send_str(),
                (_, 0) => "Buzz".into_send_str(),
                _      => i.to_str().into_send_str()
            };
            chan.send((i, b));
        }
    }

    let mut res = ~[];
    for _ in range(0, 100) {
        res.push(port.recv());
    }

    res.sort_by(|t, u| t.first().cmp(&u.first()));
    for t in res.iter() {
        println!("{}", t.second().into_owned());
    }
}

ちょっと書き換えるだけです。

あと、HEADではEnum std::str::MaybeOwnedに改名しているので注意。