9 | fn add_to_map<'l>(map: &'l HashMap<u32, &'l Foo>, element : &'l Foo)
| --- --- these two types are declared with different lifetimes...
10
Foo<'a>
появляется здесь дважды ('a
- время жизни x
внутри Foo
). Поскольку вы не указали явные значения для времени жизни 'a
, компилятор будет считать, что Foo
в качестве значения HashMap
и element
Foo
будут иметь разные времена жизни 'a
. В общем, этот подход хорошо работает.
Однако вы действительно хотите вставить element
в map
, что требует сопоставления времени жизни. Компилятор отклоняет ваш код, поскольку время жизни не совпадает. Вам необходимо четко указать время жизни x
внутри Foo
, например,
// Verbose.
fn add_to_map<'l>(map: &'l mut HashMap<u32, &'l Foo<'l>>, element : &'l Foo<'l>)
Вам не нужно , чтобы указывать явное время жизни map
, посколькуна месте вызова компилятор может проверить, что map
живет по крайней мере столько, сколько element
,
// Slightly less verbose.
fn add_to_map<'l>(map: &mut HashMap<u32, &'l Foo<'l>>, element : &'l Foo<'l>)
Обратите внимание, что в любом случае map
должно быть mut
в add_to_map
.