🦀
関数で文字列を返すときは &str じゃなく、 String を使え
発端
Rust を学び始めて、どのコードを見ても戻り値に文字列を扱うときは、 String を使っている。 Rustを完全に理解したレベルの僕には、 &str を返したほうがいいじゃないかと思った。
結果
&str だと関数から抜けるときに確保したメモリが開放されるので、String を使うのがよい。
fn main() {
println!("{}", hello_world1());
//println!("{}", hello_world2()); // expected named lifetime parameter 発生
println!("{}", hello_world3());
}
fn hello_world1() -> String {
return "Hello world1".to_string();
}
// fn hello_world2() -> &str {
// return "Hello world2";
// }
fn hello_world3() -> &'static str {
return "Hello world3";
}
補足
&'static str
で定義すればできるけど、メモリの確保のされ方がかわるみたい
static なライフサイクルを持つ変数
公式ドキュメントには以下のように書かれている。
スタティックライフサイクルにすることでプログラムが実行されている間メモリを確保してくれるようになるようでした。文字列を返すためにプログラムが実行されている間無駄にメモリを確保する必要もないと思うのでよっぽどのことがない限り、 &'static str
のような記述はふようなんじゃないだろうか。
原文
As a reference lifetime 'static indicates that the data pointed to by the reference lives for the entire lifetime of the running program. It can still be coerced to a shorter lifetime.
Discussion