1 个不稳定版本
0.0.1 | 2023年5月12日 |
---|
#77 in #智能指针
18KB
310 行
inscope
这个包实现了一个类似于 Option
的类型,可以用来表示“在作用域内”或“不在作用域内”的值。
这个包目前是不稳定的,不建议在生产环境中使用。
为什么?
这个包是为了解决我在开发其他 Panthios 工具时遇到的问题而创建的。我需要一个方法来表示可以在其他线程中被删除的值,并且删除应该反映在原始线程中。这可以通过一个 Arc<Mutex<T>>
来解决,但对于这个特定用例来说,这过于复杂。相反,可以使用 mutable-constant
包来创建一个可以设置为 None
的可变 Option
。
示例
use inscope::Scope;
let scope = Scope::new(42);
assert_eq!(*scope, Some(42));
// This requires unsafe because defiant
// `Mc` mutations are unsafe
unsafe {
scope.delete();
}
assert_eq!(*scope, None);
lib.rs
:
inscope
这个包提供了一个智能指针,允许在值仍然被借用的情况下释放它。在大多数情况下,这完全没有用处。然而,当资源被删除但仍需要被其他线程处理时,这可能会很有用。
在值仍然被借用的情况下删除值是一个不安全操作。您需要使用 unsafe
块来有效地使用这个包。
示例
use inscope::Scope;
let scope = Scope::new(42);
assert_eq!(*scope, Some(42));
unsafe {
scope.delete();
}
assert_eq!(*scope, None);