#生命周期 #引用 #类型 #临时 #字符串

无 std dyn-context

简单的生命周期消除机制

52 个版本

0.19.5 2024年5月18日
0.19.4 2024年3月10日
0.19.2 2024年2月19日
0.19.0 2023年11月14日
0.3.2 2020年9月21日

#846 in Rust 模式

Download history 177/week @ 2024-05-18 2/week @ 2024-05-25 3/week @ 2024-06-01 8/week @ 2024-06-29 31/week @ 2024-07-20 221/week @ 2024-07-27

每月下载 260
dep-obj 中使用

MIT/Apache

17KB
344

maintenance: experimental

dyn-context

此crate提供简单的生命周期消除机制。

在Rust中,生命周期是侵入式的,有时会导致代码过于复杂。此外,在某些情况下,它可能导致无法编译的代码,即代码虽然逻辑上合理,却无法编译。(这种情况可能发生,因为Rust不支持无限参数列表的存在类型。)

此crate提供了一种将多个生命周期引用“压缩”为一个指向'static类型的引用的方法。此机制保证了类型安全。

此机制允许构建具有回调的复杂系统

mod call_back {
    pub struct CallBack<State: ?Sized> {
        callback: Option<fn(state: &mut State)>
    }

    impl<State: ?Sized> CallBack<State> {
        pub fn new() -> Self { CallBack { callback: None } }

        pub fn set_callback(&mut self, callback: fn(state: &mut State)) {
            self.callback.replace(callback);
        }

        pub fn call_back(&self, state: &mut State) {
            self.callback.map(|callback| callback(state));
        }
    }
}

use call_back::CallBack;
use dyn_context::free_lifetimes;

free_lifetimes! {
    struct PrintState {
        value: 'value ref str
    }
}

fn main() {
    let mut call_back = CallBack::new();
    call_back.set_callback(|state: &mut PrintState| {
        println!("{}", state.value());
    });
    PrintStateBuilder {
        value: "Hello, world!"
    }.build_and_then(|state| 
        call_back.call_back(state)
    );
}

依赖关系

~54KB