#借用 #集合 #可变性

stonks

允许在插入条目时借用的集合

3个不稳定版本

0.2.0 2020年6月29日
0.1.1 2020年6月28日
0.1.0 2020年6月28日

#1060数据结构

MIT 许可证

6KB
109

Stonks

描述

此crate提供允许在插入条目时进行借用的集合。

尽管在插入条目时允许引用同一集合中的其他条目,但无法删除条目,因为这可能会使所持有的对该条目的引用失效。

示例

问题代码

以下代码将无法工作

use std::collections::HashSet;

fn main() {
    let mut set = HashSet::with_capacity(10);
    set.insert("hello");
    let hello = set.get(&"hello").unwrap();

    // Error: Cannot borrow `set` as mutable because it is also borrowed as immutable.
    set.insert("world");

    assert_eq!(hello, &"hello");
}

解决方案

使用Stonks,我们可以这样做,归功于内部可变性

use stonks::Set;

fn main() {
    // Our set doesn't need to be mutable.
    let set = Set::new();
    // Insert some data.
    set.insert("hello");
    // We now have a reference to the data we previously inserted.
    let hello = set.get(&"hello").unwrap();
    // We can insert more data despite holding a reference to it.
    set.insert("world");
    assert_eq!(hello, set.get(&"hello").unwrap());
}

无运行时依赖