| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // 主方法模拟
- struct Main {
- spread_list: Vec<f64>,
- }
- impl Main {
- fn new() -> Main {
- Main {
- spread_list: Vec::new(),
- }
- }
- fn call_b(&mut self, middle: &MiddleWare) {
- let a = self;
- let hook = |deep_spread: &f64| Self::hook_func_demo(a, deep_spread);
- middle.call_hook(hook);
- }
- // 钩子演示方法
- fn hook_func_demo(&mut self, depth_spread: &f64) {
- self.spread_list.push(depth_spread.clone());
- }
- }
- // 中间键模拟
- struct MiddleWare {
- deep_spread: f64,
- }
- impl MiddleWare {
- fn new(spread: f64) -> MiddleWare {
- MiddleWare {
- deep_spread: spread,
- }
- }
- fn call_hook<F: FnMut(&f64)>(&self, mut hook: F) {
- // 中间键去将钩子再传给接口
- hook(&self.deep_spread);
- }
- }
- // 主逻辑->中间键的钩子使用演示
- #[tokio::test]
- async fn test_hook() {
- let mut a = Main::new();
- let b = MiddleWare::new(0.1);
- a.call_b(&b);
- println!("{:?}", a.spread_list);
- }
|