Guest User

Untitled

a guest
Feb 18th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. use std::thread;
  2. use std::time::Duration;
  3.  
  4. struct Cacher<T>
  5. where T: Fn(u32) -> u32
  6. {
  7. calculation: T,
  8. value: Option<u32>,
  9. }
  10.  
  11. impl<T> Cacher<T>
  12. where T: Fn(u32) -> u32
  13. {
  14. fn new(calculation: T) -> Cacher<T> {
  15. Cacher {
  16. calculation,
  17. value: None,
  18. }
  19. }
  20.  
  21. fn calculation(&self, num : u32) -> u32{
  22. println!("calculating slowly...");
  23. thread::sleep(Duration::from_secs(2));
  24. num
  25. }
  26.  
  27. fn value(&mut self, arg: u32) -> u32 {
  28. match self.value {
  29. Some(v) => v,
  30. None => {
  31. let v = self.calculation(arg);
  32. self.value = Some(v);
  33. v
  34. },
  35. }
  36. }
  37. }
  38.  
  39.  
  40. fn main() {
  41. let simulated_user_specified_value = 50;
  42. let simulated_random_number = 7;
  43.  
  44. generate_workout(
  45. simulated_user_specified_value,
  46. simulated_random_number
  47. );
  48. }
  49.  
  50. fn generate_workout(intensity: u32, random_number: u32) {
  51. let mut expensive_result = Cacher::new(|num| {
  52. println!("calculating slowly...");
  53. thread::sleep(Duration::from_secs(2));
  54. num
  55. });
  56.  
  57. if intensity < 25 {
  58. println!(
  59. "Today, do {} pushups!",
  60. expensive_result.value(intensity)
  61. );
  62. println!(
  63. "Next, do {} situps!",
  64. expensive_result.value(intensity)
  65. );
  66. } else {
  67. if random_number == 3 {
  68. println!("Take a break today! Remember to stay hydrated!");
  69. } else {
  70. println!(
  71. "Today, run for {} minutes!",
  72. expensive_result.value(intensity)
  73. );
  74. }
  75. }
  76. }
Add Comment
Please, Sign In to add comment