Я натолкнулся на раздел , рассказывающий о жизнях , и поначалу был немного смущен. Поэтому я решил дать ему go, приведя небольшой пример. ( Детская площадка )
fn main() {
let b = "hello";
let mut d = "Unassigned";
{
let a = "hi";
let c = lifetime(&a, &b);
d = &c;
}
// My confusion happens here, I was expecting a compile-time error
// since the lifetime of 'c' is the same as 'a' which is in the previous block
// from my understanding. But this compiles just fine
println!("{}", d);
}
fn lifetime<'a, 'b>(test: &'a str, test2: &'b str) -> &'a str {
println!("{}, {}", test, test2);
return "returned value of lifetime";
}
Насколько я понимаю, функция lifetime
связывает время жизни 'a
с возвращенным опорным значением. Поэтому обычно я ожидаю, что строка println!("{}", d);
прервется во время компиляции с ошибкой, указывающей, что время жизни 'a
находится вне области видимости, что я ошибался.
Что я понял неправильно? Почему этот код компилируется?
Я видел это и , что , что в основном просто смутило меня еще больше, потому что они в некоторой степени говорят то, что я ожидал как результат на первом месте.