Mam HashMap, który używa char
dla klucza i struct
dla wartości.Jak mogę powrócić nową struct z Opcji :: unwrap_or?
get()
metoda HashMap będzie często być wywołana z kluczy, które nie są w HashMap, więc chciałbym użyć unwrap_or()
na zwróconej opcja tworzenia domyślnego struct
wartość. Jednak, gdy próbuję to zrobić, kompilator wyrzuca następujący błąd (z temp
jest wartość domyślna, że jestem stara się powrócić):
lib.rs:51:4: 51:8 error: `temp` does not live long enough
Oto mały reproducer:
struct Sample {
thing: i32
}
fn do_stuff() {
let map = HashMap::<char, Sample>::new();
let sample = map.get(&'a').unwrap_or({
let temp = Sample {
thing : 0
};
&temp
});
}
mam dwa pytania:
- Czy istnieje sposób, aby
temp
wiążące żyją dłużej? - Czy istnieje lepszy sposób, aby nie spaść z powrotem na domyślny
struct
przypadku korzystania z opcji?
Jakoś przeoczyłem, że możesz przesłać dalej, deklarując powiązanie, jak to jest zrobione w punkcie 3. Nie sądzę, że widziałem jakiekolwiek użycie deklaracji do przodu w książce Rust lub gdziekolwiek indziej. Dzięki! –