ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

Rustで文字列の連結

Rust Standard Library Cookbookを読み始めました。

Amazon CAPTCHA

この本ではRustの文字列連結として3つの方法が紹介されています。

moveによる連結

一番標準の方法。わかりやすく効率も良いが、連結後はmoveによりhelloは使えなくなる。

fn by_moving() {
    let hello = "hello ".to_string();
    let world = "world";

    let hello_world = hello + world;

    println!("{}", hello_world);
}

helloはStringで、worldが&str。この2つを連結するとStringになるというのもよくわかってない。(なんで to_string()が必要なの?)

cloneによる連結

clone()を使うことで、一時変数が作られ、それをmoveすることで文字列を連結している。連結後もhelloが使えることがポイント。

fn by_cloning() {
    let hello = "hello".to_string();
    let world = "world";

    let hello_world = hello.clone()  + world;
    println!("{} ", hello_world);
}

mutingによる連結

helloをmutableで宣言して、push_strを使う方法。エレガントじゃないらしい。

fn by_mutating() {
    let mut hello = "hello".to_string();
    let world = "world";

    hello.push_str(world);
    println!("{} ", hello);
}

今まで勉強したプログラミング言語の中で一番文字列がめんどくさい。

元のソースはこちらです。 github.com