2016-07-04 16 views
0

錆の文字列ベクトルを返すにはどうしたらいいですか?どのように文字列ベクトルを返すことができますか?

src/main.rs:9:22: 9:26 error: missing lifetime specifier [E0106] 

私は失わ少しだけど、私は私が誤解だと思う(または:コンパイラは、寿命について何かを言うが、私は私の問題は、寿命について本当によく分からない

fn test_vec() -> Vec<&str> { 
    vec!("foo", "bar") 
} 

:私が試しました学ぶことを忘れた)何か。

+0

https://play.rust-lang.org/?code=fn%20test_vec()%20-%3E%20Vec%3C%26%27static%20str%3E%20%7B% 0A%20%20%20%20%20%20%20%20%22%22%20%22%22% %20println!(%22%7B%3A%3F%7D%22%2C%20test_vec())%3B%0A%7D%0A&version = stable&backtrace = 0 – ArtemGr

答えて

5

&strは、Stringではありません。それはStringまたは他のどこかに格納されている同等のものへの一種のポインタを意味する "文字列スライス"です。あなたの場合、文字列リテラルを使用しています(引用符を使用すると、文字列リテラルが得られます)。文字列リテラルのタイプは&'static strです。コンパイルされたコードが格納されている場所と同じ場所に格納されているため、プログラムのランタイム全体(少なくとも)を意味する'staticが有効です。

したがって、簡単な修正では、メソッドで特定の型を返すことができます:&'static str


コンパイラは、関数が参照型の引数を取らないため、返された参照の有効期間を推測することはできません。コンパイラが関数のシグネチャの中で生涯を推論する唯一の方法は、参照を返す場合、それが参照する引数よりも短く存続する必要があると仮定することです。詳細はこちらThe Book

関連する問題