mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2025-05-01 10:49:12 +08:00
35 lines
575 B
Rust
Executable File
35 lines
575 B
Rust
Executable File
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() {}
|