錆はこのような最適な言語のようです - 私はコンパイラとの戦いが価格になるはずだったはずです。構造体のコンストラクタを作成しようとしていますが、does not live long enough
というエラーが発生しています。骨のbarestに蒸留参照ベクトルを使用して構造体を作成するにはどうすればよいですか?
、私が持っている:そのベクトルlist
が特色オブジェクトのリストを保持することになっているので、
fn main() {
println!("RUST PLEASE");
}
struct Help<'a> {
list: Vec<&'a Traits>
}
impl<'a> Help<'a> {
fn new() -> Help<'a> {
Help { list: vec![&Test] }
}
}
trait Traits {
fn mice(&self);
}
struct Test;
impl Traits for Test {
fn mice(&self) { print!("WHY"); }
}
だから、私はこれをやっています。それは(おそらく)与えられた形質を実装するクラスを不均一に保持する。私が理解しているように、それは参照を使ってベクターが実際のサイズになるようにしなければならないということです。それは参考になるので、一緒に住んで死ぬことを確実にするために生涯はそこになければなりません。
事は、間違っていることが分かります。 new
では、そのTest
はnew
スコープに属しています。その参照を機能の上に出し入れしようとしています。私がそうするなら、Test
は範囲外になり、参照は悪いです。では私は何をしますか?どのように私はHelp
の生涯続くオブジェクトを得ることができますか?結局のところ、それを所有する人は本当にありません。
また、誰かが一般的な関数から参照を戻す方法について一般的なヒントがあれば、私はそれらを聞いて非常にうれしいです。
EDITこれは、単にオブジェクトの所有権を渡すのと同じではありません。ベクトルは、スタック上のオブジェクトではなく参照であるが必要なので、私はそれを行うことができません。サイモンの答えはおそらく私が探しているものです - 私はそれのようなものを箱に入れることができたことを忘れていました。
[拡大さび寿命(http://stackoverflow.com/questions/31252851/expanding-rust-lifetime)の可能性の重複 –