Rust scheint so eine optimale Sprache zu sein - ich hätte wissen müssen, dass der Kampf gegen den Compiler der Preis wäre. Ich versuche, einen Konstruktor für eine Struktur zu erstellen, und ich bekomme does not live long enough
Fehler.Wie erstellt man eine Struktur mit einem Vektor von Referenzen?
Destilliertes auf die nötigsten Knochen, ich habe:
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"); }
}
Also, ich bin dies zu tun, weil das Vektor list
soll eine Liste der Charakterzug Gegenstände halten. Es hält (angeblich) heterogen jede Klasse, die das zugefügte Merkmal implementiert. So wie ich es verstehe, muss ich Referenzen verwenden, damit der Vektor eine echte Größe hat, mit der er arbeiten kann. Und da es eine Referenz ist, muss die Lebenszeit da sein, um sicherzustellen, dass sie zusammen leben und sterben.
Die Sache ist, ich weiß, was los ist. In new
gehört das Test
in den Bereich new
, und ich versuche, seine Referenz nach oben und außerhalb der Funktion zu übergeben. Wenn ich das tue, geht Test
aus dem Geltungsbereich und die Referenz ist schlecht. Also was mache ich? Wie kann ich erreichen, dass das Objekt die Lebensdauer von Help
hält? Schließlich gibt es wirklich niemanden, der es besitzen könnte.
Außerdem, wenn jemand irgendwelche Tipps im Allgemeinen darüber hat, wie man Referenzen aus einer Funktion im Allgemeinen zurückgibt, würde ich mich sehr freuen, sie zu hören.
BEARBEITEN Dies ist nicht das Gleiche wie einfach das Eigentum des Objekts übergeben; Ich kann das nicht tun, weil der Vektor eine Referenz anstelle eines Objekts auf dem Stapel benötigt. Die Antwort von Simon ist wahrscheinlich das, wonach ich gesucht habe - ich hatte vergessen, dass ich so Dinge einrahmen könnte.
Mögliche Duplikat [Expanding Rust Lebensdauer] (http://stackoverflow.com/questions/31252851/expanding-rust-lifetime) –