14 个版本
0.2.2 | 2023 年 1 月 28 日 |
---|---|
0.2.1 | 2022 年 9 月 22 日 |
0.1.10 | 2022 年 9 月 22 日 |
0.1.5 | 2022 年 8 月 29 日 |
385 在 无标准库 中排名
每月下载量 35
在 async-http-body 中使用
11KB
206 行
请阅读此内容
该项目尚未准备好成为产品。当 GAT 稳定时,我将完善一切。
Self-Reference
自引用助手(灵感来自 Selfie)
这个 crate 提供了对其自引用的安全访问。主要思想是在对象未固定(这既不安全又使许多自引用 crate 更加复杂)时不在初始化引用,只提供固定引用,使设计自引用对象变得更加容易。在 self-reference
crate 中,你只能初始化具有 'static
生命周期的引用对象,这意味着总是安全的。
初始化引用对象
与其他自引用 crate 的主要区别在于初始化引用对象。你只能初始化具有 'static
生命周期的引用对象
let mut reference: SelfReference<String, Ref<str>> = SelfReference::new(String::new(), || {
// you can't get reference of object while initialization.
// only possible cases are reference that has `'static` lifetime.
""
});
pin_mut!(reference);
// this is totally SAFE. this lowers `'static` lifetime into some other lifetime.
reference.get_ref();
重置机制
初始化引用对象的唯一方法是使用 reset
方法。记住!你只能在 SelfReference
对象固定时使用重置方法。
let mut reference: SelfReference<String, Ref<str>> = SelfReference::new("self-reference".to_string(), || "");
pin_mut!(reference);
// You can reset object to set referencial object to hold object itself.
reference.reset_unpin(|s| &s[..4]);
println!("{}", reference.get_ref()); // prints "self"
依赖项
~325–790KB
~17K SLoC