在 Rust 中,我正在寻找一种更简洁和惯用的方法来为昂贵的计算定义缓存。
在The Rust Programming Language第二版的第 13 章中,作者为读者留下了一个练习来重构一个结构以返回延迟计算的值。
经过四天的反复试验,我想出了:
use std::collections::HashMap;
#[allow(dead_code)]
struct Cache<T>
where T: Fn(u32) -> u32
{
calculation: T,
internal: HashMap<u32, u32>
}
#[allow(dead_code)]
impl<T> Cache<T>
where T: Fn(u32) -> u32
{
fn new(calculation: T) -> Cache<T> {
Cache {
calculation,
internal: HashMap::new(),
}
}
fn set(&mut self, arg: u32, value: u32) -> u32 {
self.internal.insert(arg, value);
self.get(arg)
}
fn get(&mut self, arg: u32) -> u32 {
self.internal[&arg]
}
fn value(&mut self, arg: u32) …Run Code Online (Sandbox Code Playgroud) rust ×1