Предположим, у вас есть функция, возвращающая замыкание, которое работает со ссылкой.Несомненно, объект за ссылкой должен жить как минимум до тех пор, пока вызывается замыкание.
Вот очень простой пример, демонстрирующий проблему.
fn get_cloned<'a>(obj: &'a MyStruct) -> impl Fn() -> MyStruct {
|| {obj.clone()}
}
Компилятор утверждает, что возвращаемое замыкание имеет время жизни static :
не может вывести соответствующее время жизни
... но это заимствование...rustc
main.rs (60, 56): этот тип возвращаемого значения оценивается как 'static
время жизни ...
main.rs (61, 5): ... но это заимствование ...
Как мне сказать компилятору, что я использую только результат функции (замыкание), пока ссылка действительна?
Спасибо!
[Редактировать]
Вам нужна фиктивная структура, которая содержит ссылку и закрытие?
struct Dummy<'a>{
reference: &'a MyStruct,
closure: Fn() -> MyStruct
}
?
Предположим, что клонированиеочень дорого, и закрытие никогда не может быть названо.-> ленивая оценка обязательна.