struct Cacher<T,E>
where
T: Fn(E) -> E,
E: Copy
{
query: T,
value: Option<E>,
}
impl<T,E> Cacher<T,E>
where
T: Fn(E) -> E,
E: Copy
{
fn new(query: T) -> Cacher<T,E> {
Cacher {
query,
value: None,
}
}
fn value(&mut self, arg: E) -> E {
match self.value {
Some(v) => v,
None => {
let v = (self.query)(arg);
self.value = Some(v);
v
}
}
}
}
fn main() {
}
#[test]
fn call_with_different_values() {
let mut c = Cacher::new(|a| a);
let v1 = c.value(1);
let v2 = c.value(2);
assert_eq!(v2, 1);
}
你可以在这里找到答案(在 solutions 路径下)
Iterator
你可以在这里找到答案(在 solutions 路径下)
newtype and Sized
Smart pointers
Box
Deref
Drop
Rc and Arc
Cell and RefCell
Weak and Circle reference
Self referential
Threads
Basic using
Message passing
Sync
Atomic
Send and Sync
Global variables
Errors
Unsafe doing