hook_test.rs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // 主方法模拟
  2. struct Main {
  3. spread_list: Vec<f64>,
  4. }
  5. impl Main {
  6. fn new() -> Main {
  7. Main {
  8. spread_list: Vec::new(),
  9. }
  10. }
  11. fn call_b(&mut self, middle: &MiddleWare) {
  12. let a = self;
  13. let hook = |deep_spread: &f64| Self::hook_func_demo(a, deep_spread);
  14. middle.call_hook(hook);
  15. }
  16. // 钩子演示方法
  17. fn hook_func_demo(&mut self, depth_spread: &f64) {
  18. self.spread_list.push(depth_spread.clone());
  19. }
  20. }
  21. // 中间键模拟
  22. struct MiddleWare {
  23. deep_spread: f64,
  24. }
  25. impl MiddleWare {
  26. fn new(spread: f64) -> MiddleWare {
  27. MiddleWare {
  28. deep_spread: spread,
  29. }
  30. }
  31. fn call_hook<F: FnMut(&f64)>(&self, mut hook: F) {
  32. // 中间键去将钩子再传给接口
  33. hook(&self.deep_spread);
  34. }
  35. }
  36. // 主逻辑->中间键的钩子使用演示
  37. #[tokio::test]
  38. async fn test_hook() {
  39. let mut a = Main::new();
  40. let b = MiddleWare::new(0.1);
  41. a.call_b(&b);
  42. println!("{:?}", a.spread_list);
  43. }