Спасибо! Это было очень полезное объяснение.

ел бы использоватьHashMap кэшировать дорогостоящие вычисления, зависящие от других записей на карте. Шаблон ввода обеспечивает только изменяемую ссылку на сопоставленное значение, но не на остальную частьHashMap, Буду очень признателен за отзыв о лучшем способе решения этого (неправильного) примера игрушки:

use std::collections::HashMap;
use std::collections::hash_map::Entry::{Occupied, Vacant};

fn compute(cache: &mut HashMap<u32, u32>, input: u32) -> u32 {
    match cache.entry(input) {
        Vacant(entry) => if input > 2 {
            // Trivial placeholder for an expensive computation.
            *entry.insert(compute(&mut cache, input - 1) +
                          compute(&mut cache, input - 2))
        } else {
            0
        },
        Occupied(entry) => *entry.get(),
    }
}

fn main() {
    let mut cache = HashMap::<u32, u32>::new();
    let foo = compute(&mut cache, 12);
    println!("{}", foo);
}

(игровая площадка)

Проблема с приведенным фрагментом заключается в том, чтоcache.entry заимствуетcache незыблемо, но я хотел бы обновитьcache также.

Ответы на вопрос(2)

Ваш ответ на вопрос