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 模式
每月下载 260
在 dep-obj 中使用
17KB
344 行
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