Я новичок в Rust, так что простите, если это дублирует другие вопросы. Я посмотрел другие вопросы, но они все немного отличаются, и я чувствую, что не знаю достаточно о ржавчине, чтобы понять, похожа ли их проблема на мою.
Я создал игровую площадку моего кода, повторяющего мою проблему - код, вставленный ниже.
Я получаю ошибку cannot borrow '*context' as mutable more than once at a time
, но, как я ее читаю, первый &mut
выпускается раньше второго. Может кто-то пролить свет на то, почему это происходит?
struct Context {
foo: Option<String>,
bar: Option<String>
}
impl Context {
fn new() -> Self {
Context {
foo: None,
bar: None
}
}
fn foo(&mut self) -> &String {
if self.foo.is_none() {
let message = String::from("foo");
self.foo = Some(message);
}
self.foo.as_ref().unwrap()
}
fn bar(&mut self) -> &String {
if self.bar.is_none() {
let message = String::from("bar");
self.bar = Some(message);
}
self.bar.as_ref().unwrap()
}
}
fn print(context: &mut Context) {
let foo = context.foo();
let bar = context.bar();
println!("{}{}", foo, bar);
}
fn main() {
let mut context = Context::new();
print(&mut context);
}