Provavelmente essa pergunta já foi feita, talvez com uma formulação diferente, mas não consegui encontrá-la. Se isso for fechado por causa disso, peço desculpas, mas eu tentei antes.
Na verdade, o problema é simples:
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();
}
Ao compilar isso, obtenho:
`self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
O que eu entendo aqui é que, na verdade, não posso simplesmente atualizar o treeset, pois ele é imutável.
Então eu tentei com
pub struct Service {
blobs: &'static mut BTreeSet<u16>,
}
e
fn new() -> Self {
let bt: &mut BTreeSet<u16> = &mut BTreeSet::new();
Self { blobs: bt }
}
mas isso produz
creates a temporary value which is freed while still in use
(enquanto o erro original ainda está lá, então agora tenho dois...)
Entendo que eu deveria, de alguma forma, tornar o BTreeSet
mutável, mas como?
Na maioria das vezes, a mensagem de erro apenas informa como corrigir o código, mas tudo bem, compilador enferrujado.
Fixo