Нельзя использовать нестатическое время жизни, потому что подпись manage()
буквально говорит Send + Sync + 'static
. Причина этого указана в документации для государства :
Управляемый тип должен быть потокобезопасным и передаваться через границы потоков. Другими словами, он должен реализовывать Send + Sync + 'static.
То есть, поскольку (рабочие) потоки могут получить доступ к управляемому состоянию в любое время, и поскольку нет гарантии, когда эти потоки могут выйти, управляемое состояние должно существовать как минимум столько же, сколько вся программа; это 'static
.
Вы можете попробовать изменить foo()
, чтобы взять bar: Bar<'static>
вместо общего срока службы и продолжить свой путь оттуда. Требование 'static
обычно не так плохо, как кажется, поскольку все собственные значения (например, String::new()
) равны 'static
, если они не содержат ссылок на другие вещи.
Если вы не можете предоставить Bar<'static>
, вы можете использовать Arc
вместо простых ссылок, поэтому Bar<'a>
становится Bar
. Обоснование здесь заключается в том, что Bar
содержит ссылки с атомным подсчетом вместо ссылок, поэтому наличие Bar
гарантирует, что все члены живы, а Bar
жив. Это составляет Bar
'static
.