мапу, если функция его создания возвращает Result? (и при Error нужно сделать early return)
у new() есть сайд эффекты, которые не хотелось бы производить раньше, чем было проверенно существование
http://play.rust-lang.org/?gist=1e61056ddb44a36b1147dc5c14157bcf&version=stable&mode=debug&edition=2015
пример не смотрел, но быстрый ответ — никак, проблема известная )
entry api смотри
м? http://play.rust-lang.org/?gist=1a7ca9ed2d519c5e2ddbaaf01bbbfd4a&version=stable&mode=debug&edition=2015
impl Holder { fn eventually_add(a: A) -> Result<(), ()> { use std::collections::hash_map::Entry; let mut m: HashMap<i32, A> = HashMap::new(); if let Entry::Vacant(e) = m.entry(0) { e.insert(A::new()?); } Ok(()) } }
[SOLVED] кстати, вспомнил в чём ещё вопрос был; а можно как-нибудь быстро вернуть вставленный элемент? т.е. изначально было примерно так: let thing = m.entry(0).or_insert(A::new())
Обсуждают сегодня