Jeśli mam funkcję zwracającą funkcję:żywotność wyrażenia lambda w rdzy
fn<'r, T> (p : T) -> (&'r fn(&'r str) -> ~[(T,int)]) {
return |s| ~[(p, 0)]
}
Jednak to nie wydają się działać, pojawia się następujący (nieco tautologiczną) Błąd:
playground.rs:10:8: 10:29 error: cannot infer an appropriate lifetime due to conflicting requirements
playground.rs:10 return |s| ~[(p, 0i)]
^~~~~~~~~~~~~~~~~~~~~
playground.rs:9:70: 11:5 note: first, the lifetime cannot outlive the block at 9:70...
playground.rs:9 pub fn result<'r, T>(p : T) -> (&'r fn(&'r str) -> ~[(T, int)]){
playground.rs:10 return |s| ~[(p, 0i)]
playground.rs:11 }
playground.rs:10:8: 10:29 note: ...due to the following expression
playground.rs:10 return |s| ~[(p, 0i)]
^~~~~~~~~~~~~~~~~~~~~
playground.rs:9:70: 11:5 note: but, the lifetime must be valid for the lifetime &'r as defined on the block at 9:70...
playground.rs:9 pub fn result<'r, T>(p : T) -> (&'r fn(&'r str) -> ~[(T, int)]){
playground.rs:10 return |s| ~[(p, 0i)]
playground.rs:11 }
playground.rs:10:8: 10:29 note: ...due to the following expression
playground.rs:10 return |s| ~[(p, 0i)]
^~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
Sądzę, że mówi się, że czas trwania zwrotu podpisu funkcji i wartość zwracana nie pasują do siebie. Jednak nie jestem pewien, jak opisać lambdę przez całe życie, aby to działało.