16 个版本

使用旧的 Rust 2015

0.4.1 2020 年 2 月 27 日
0.4.0 2018 年 8 月 17 日
0.3.3 2017 年 3 月 9 日
0.2.2 2016 年 10 月 7 日
0.1.2 2015 年 7 月 27 日

⚠️ 已报告问题

#169数据结构

Download history 25815/week @ 2024-03-14 22289/week @ 2024-03-21 39083/week @ 2024-03-28 23482/week @ 2024-04-04 23254/week @ 2024-04-11 25113/week @ 2024-04-18 25206/week @ 2024-04-25 19175/week @ 2024-05-02 21681/week @ 2024-05-09 29097/week @ 2024-05-16 28629/week @ 2024-05-23 22358/week @ 2024-05-30 30308/week @ 2024-06-06 25719/week @ 2024-06-13 24970/week @ 2024-06-20 19968/week @ 2024-06-27

105,165 每月下载量
用于 571 个 crate (70 直接)

MIT 许可证

68KB
1K SLoC

Build Status Crate Docs

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
}

入门指南

要开始,请在 Cargo.toml 中添加以下内容。

owning_ref = "0.4.1"

...并查看如何使用的文档

示例

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!
}

依赖

~12KB