这个问题可能已经有人问过了,可能措辞不同,但我找不到。如果这个问题因此被关闭,我很抱歉,但我之前确实尝试过。
其实问题很简单:
use std::collections::BTreeSet;
pub struct Service {
blobs: BTreeSet<u16>,
}
impl Service {
fn new() -> Self {
let bt: BTreeSet<u16> = BTreeSet::new();
Self { blobs: bt }
}
fn insert(&self, val: u16) -> bool {
&self.blobs.insert(val);
true
}
fn print(&self) {
println!("{}", self.blobs.len());
}
}
fn main() {
let s: Service = Service::new();
s.print();
s.insert(4);
s.print();
}
当编译这个时,我得到:
`self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
我在这里理解的是,实际上,我不能只更新树集,因为它是不可变的。
所以我尝试了
pub struct Service {
blobs: &'static mut BTreeSet<u16>,
}
和
fn new() -> Self {
let bt: &mut BTreeSet<u16> = &mut BTreeSet::new();
Self { blobs: bt }
}
但结果却如此
creates a temporary value which is freed while still in use
(尽管原始错误仍然存在,所以现在我有两个......)
我知道我应该以某种方式使其BTreeSet
可变,但该怎么做呢?
大多数时候,错误消息只是告诉您如何修复代码,全部使用 rust 编译器。
固定的