2 个版本
1.0.0-beta.2 | 2020年5月27日 |
---|---|
1.0.0-beta.1 | 2020年5月24日 |
#2666 in Rust 模式
23 每月下载量
44KB
805 行
ref-portals
安全地在原始作用域外使用(堆)引用。
此库提供方便的运行时检查的越界处理,它们是
!Send + !Sync
或(相关地)Send
/Sync
,- 不可变或可变,并且
- 目标是
Sync
或!Sync
值。
请参阅文档以获取更多信息。
示例
use ref_portals::rc::Anchor;
let x = "Scoped".to_owned();
let anchor = Anchor::new(&x);
let self_owned: Box<dyn Fn() + 'static> = Box::new({
let portal = anchor.portal();
move || println!("{}", *portal)
});
self_owned(); // Scoped
注意,在 anchor
之前丢弃 self_owned
仍然会导致恐慌。
您可以使用弱门来解决这个问题
use ref_portals::rc::Anchor;
let x = "Scoped".to_owned();
let anchor = Anchor::new(&x);
let eternal: &'static dyn Fn() = Box::leak(Box::new({
let weak_portal = anchor.weak_portal();
move || println!(
"{}",
// Panics iff the anchor has been dropped.
*weak_portal.upgrade(),
)
}));
eternal(); // Scoped
版本
ref-portals
严格遵循 语义版本控制 2.0.0,但有以下例外
- 次要版本在主要版本更改时不会重置为 0。
将其视为全局功能级别。 - 补丁版本在主要或次要版本更改时不会重置为 0。
将其视为全局补丁级别。
依赖关系
~120KB