Also, in:Was bedeutet eine Lebensdauer im Rost?
fn v1<'a> (a:~[&'a str]) -> ~[&'a str] {
return a;
}
#[test]
fn test_can_create_struct() {
let x = v1("Hello World".split(' ').collect());
}
Ich weiß, ich habe http://static.rust-lang.org/doc/master/guide-lifetimes.html#named-lifetimes gelesen, aber ich verstehe nicht, was dieser Code tatsächlich tut.
Die Funktion ist grundsätzlich wie ein generisches fn parametrisiert, aber mit einer Lebensdauer, ist, was ich auf dem IRC-Kanal gesagt habe, aber stellen wir uns vor, dass dies der Fall ist, und wir haben eine bestimmte Lebenszeitstruktur .
Anscheinend bin ich Aufruf implizit:
v1::<L>("Hello World".split(' ').collect());
..aber ich bin es nicht. Die Lebenszeit, die an diese Funktion übergeben wird, ist eine Instanz eines Lebens, es ist nicht eine Art der Lebensdauer, so dass Kommentar keinen Sinn für mich macht.
Ich meine, ich verstehe im Grunde, was los ist (denke ich): Die zurückgegebenen ~[&str]
hat die gleiche Lebensdauer wie der Umfang des Anrufers, vermutlich die test_can_create_struct()
Funktion. Das ist, weil (wie ich es verstehe) die Funktion v1
mit der Lebensdauer Instanz von der aufrufenden Funktion aufgerufen wird.
Sehr verwirrend.
Dann haben wir einige andere Beispiele wie: https://gist.github.com/bvssvni/8970459
Hier ist ein Fragment:
impl<'a> Data<'a> {
pub fn new() -> Data<'a> {
Data { a: None, b: None }
}
pub fn a(&'a mut self, a: int) -> State<'a, Step1> {
self.a = Some(a);
State { data: self }
}
}
hier Jetzt naiv ging ich davon aus, dass die Data<'a>
bedeutet, dass die Lebensdauer Instanz für die Funktion a()
gleich ist.
d. Wenn Sie einen (let blah = Data::new()
) erstellen und blah.a()
aufrufen, wird die Lebensdauer vom Erstellungsaufruf geerbt; d.h. das State
Objekt, das zurückgegeben wird, existiert so lange wie das übergeordnete Data
Objekt.
... aber anscheinend ist das auch falsch. Ich habe also keine Ahnung, was die Lebenszeitvariablen überhaupt bedeuten.
Hilfe!
Lebenszeiten * sind * Teil des Typsystems; Sie sind keine Instanzen. –