mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2025-02-24 05:13:29 +08:00
35 lines
575 B
Rust
35 lines
575 B
Rust
|
struct Cacher<T>
|
||
|
where
|
||
|
T: Fn(u32) -> u32,
|
||
|
{
|
||
|
calculation: T,
|
||
|
value: Option<u32>,
|
||
|
}
|
||
|
|
||
|
// ANCHOR: here
|
||
|
impl<T> Cacher<T>
|
||
|
where
|
||
|
T: Fn(u32) -> u32,
|
||
|
{
|
||
|
fn new(calculation: T) -> Cacher<T> {
|
||
|
Cacher {
|
||
|
calculation,
|
||
|
value: None,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn value(&mut self, arg: u32) -> u32 {
|
||
|
match self.value {
|
||
|
Some(v) => v,
|
||
|
None => {
|
||
|
let v = (self.calculation)(arg);
|
||
|
self.value = Some(v);
|
||
|
v
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// ANCHOR_END: here
|
||
|
|
||
|
fn main() {}
|