3 个版本
使用旧的 Rust 2015
0.4.2 | 2019年7月16日 |
---|---|
0.4.1 | 2019年6月22日 |
0.4.0 | 2019年6月19日 |
#2117 in Rust 模式
26 每月下载量
78KB
1K SLoC
这是一个原始仓的分支,以启用一些特定功能。如有问题或请求,请联系我。
owning-ref-rs
一个用于创建携带所有者的引用的库。
这有时很有用,因为 Rust 的借用规则通常阻止移动已借用的类型。例如,以下代码会被拒绝
fn return_owned_and_referenced<'a>() -> (Vec<u8>, &'a [u8]) {
let v = vec![1, 2, 3, 4];
let s = &v[1..3];
(v, s)
}
这个库通过将所有者和引用捆绑在一起,并确保生命周期约束,以包装类型的形式启用这种安全使用
fn return_owned_and_referenced() -> OwningRef<Vec<u8>, [u8]> {
let v = vec![1, 2, 3, 4];
let or = OwningRef::new(v);
let or = or.map(|v| &v[1..3]);
or
}
入门
owning-ref-rs 可在 crates.io 上找到。建议在那里查找最新发布的版本,以及最新文档的链接。
在最后一次更新此 README 的时间点,最新发布的版本可以这样使用
将以下依赖项添加到您的 Cargo 清单...
[dependencies]
owning_ref = "0.3"
...并查看 文档 了解如何使用它。
示例
extern crate owning_ref;
use owning_ref::BoxRef;
fn main() {
// Create an array owned by a Box.
let arr = Box::new([1, 2, 3, 4]) as Box<[i32]>;
// Transfer into a BoxRef.
let arr: BoxRef<[i32]> = BoxRef::new(arr);
assert_eq!(&*arr, &[1, 2, 3, 4]);
// We can slice the array without losing ownership or changing type.
let arr: BoxRef<[i32]> = arr.map(|arr| &arr[1..3]);
assert_eq!(&*arr, &[2, 3]);
// Also works for Arc, Rc, String and Vec!
}
依赖项
~0.6–0.9MB
~14K SLoC