Advertisement
Guest User

Untitled

a guest
Aug 24th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. #![allow(unused)]
  2. fn main() {
  3. #![allow(unused_variables)]
  4. fn main() {
  5. use std::thread;
  6. use std::time::Duration;
  7.  
  8. struct Cacher<T>
  9. where T: Fn(u32) -> u32
  10. {
  11. calculation: T,
  12. value: Option<u32>,
  13. }
  14.  
  15. impl<T> Cacher<T>
  16. where T: Fn(u32) -> u32
  17. {
  18. fn new(calculation: T) -> Cacher<T> {
  19. Cacher {
  20. calculation,
  21. value: None,
  22. }
  23. }
  24.  
  25. fn value(&mut self, arg: u32) -> u32 {
  26. match self.value {
  27. Some(v) => v,
  28. None => {
  29. let v = (self.calculation)(arg);
  30. self.value = Some(v);
  31. v
  32. },
  33. }
  34. }
  35. }
  36.  
  37. fn generate_workout(intensity: u32, random_number: u32) {
  38. let mut expensive_result = Cacher::new(|num| {
  39. println!("calculating slowly...");
  40. thread::sleep(Duration::from_secs(2));
  41. num
  42. });
  43.  
  44. if intensity < 25 {
  45. println!(
  46. "Today, do {} pushups!",
  47. expensive_result.value(intensity)
  48. );
  49. println!(
  50. "Next, do {} situps!",
  51. expensive_result.value(intensity)
  52. );
  53. } else {
  54. if random_number == 3 {
  55. println!("Take a break today! Remember to stay hydrated!");
  56. } else {
  57. println!(
  58. "Today, run for {} minutes!",
  59. expensive_result.value(intensity)
  60. );
  61. }
  62. }
  63. }
  64. }
  65. let text: Option<String> = Some("Hello, world!".to_string());
  66. // First, cast `Option<String>` to `Option<&String>` with `as_ref`,
  67. // then consume *that* with `map`, leaving `text` on the stack.
  68. let text_length: Option<usize> = text.as_ref().map(|s| s.len());
  69. println!("still can print text: {:?}", text);
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement