Closure

下面代码是Rust圣经课程中闭包章节的课内练习题答案:

1. struct Cacher<T,E>
2. where
3. T: Fn(E) -> E,
4. E: Copy
5. {
6. query: T,
7. value: Option<E>,
8. }

10. impl<T,E> Cacher<T,E>
11. where
12. T: Fn(E) -> E,
13. E: Copy
14. {
15. fn new(query: T) -> Cacher<T,E> {
16. Cacher {
17. query,
18. value: None,
19. }
20. }

22. fn value(&mut self, arg: E) -> E {
23. match self.value {
24. Some(v) => v,
25. None => {
26. let v = (self.query)(arg);
27. self.value = Some(v);
28. v
29. }
30. }
31. }
32. }
33. fn main() {

35. }

37. #[test]
38. fn call_with_different_values() {
39. let mut c = Cacher::new(|a| a);

41. let v1 = c.value(1);
42. let v2 = c.value(2);

44. assert_eq!(v2, 1);
45. }

你可以在这里找到答案(在 solutions 路径下)