個人的な備忘録。
+= を用いた文字列の連結
Rustの文字列連結(String)には +=
が利用できるので、一つのString型の変数に複数回文字列連結を行いたいときなども便利だった。
(なお、ここではパフォーマンス周りについては特に書きません。後日調べてみて追記するかも)
サンプルコードは下記。
fn main() { let mut text: String = "aaa".to_string(); text += "bbb"; text += "ccc"; println!("{}", text); }
これを実行すると、
aaabbbccc
と出力される。
その他の方法
moveすることによる連結
変数の後ろに新たな文字列を追加して代入し直す方法。
fn main() { let mut text: String = "aaa".to_string(); text = text + "bbb"; text = text + "ccc"; println!("{}", text); }
今回のように mutable
で宣言している場合は不要だと思うが、例えば下記のような処理の場合は有効。
fn main() { let text: String = "aaa".to_string(); let text2 = text + "bbb"; let text3 = text2 + "ccc"; println!("{}", text3); }
ちなみにこういうことはできない。すでにmoveしてしまっているため、 text
と text2
の出力部分でエラーとなる。
fn main() { let text: String = "aaa".to_string(); let text2 = text + "bbb"; let text3 = text2 + "ccc"; println!("{}", text); println!("{}", text2); println!("{}", text3); }
cloneを用いた連結
clone
を使って文字列連結。
今回のようなケースではまず利用することはないかと思われる。
fn main() { let mut text: String = "aaa".to_string(); text = text.clone() + "bbb"; text = text.clone() + "ccc"; println!("{}", text); }
今回はすべて mutable
で宣言した text
を使いまわしているので不要だが、例えば下記のように複数の変数を使うような場合は利用できる
(moveしている場合はエラーになったが、この場合は利用できる。cloneを使うことで一時的に変数が作られて、その変数がmoveするという流れになっているらしい)
fn main() { let text: String = "aaa".to_string(); let text2 = text.clone() + "bbb"; let text3 = text2.clone() + "ccc"; println!("{}", text); println!("{}", text2); println!("{}", text3); }