学 Rust 有点走火入魔了,感觉这是一个简单的 Bug,但还解决不了。代码放在 Rust Playground。
内容其实是设计模式中 Facade Pattern 的实现:这里把无关代码都删了,Tuner 用来调频,Amplifier 是放大器,HomeTheater 中有 Tuner 和 Amplifier 。
最后在测试的 main:
let amp = Amplifier::new("Amplifier");
let tuner = Tuner::new("AM/FM Tuner");
let mut home_theater = HomeTheaterFacade::new(amp, tuner);
home_theater.listen_radio();
home_theater.stop_radio();
}
这样写的话就报错:cannot borrow home_theater as mutable more than once at a time 。当然,我只写 listen_radio 或 stop_radio 就没有问题。
对比下面的代码,
#[derive(Default)]
struct Foo {
i: i32,
j: i32,
}
impl Foo {
fn set_i(&mut self, i: i32) {
self.i = i;
}
fn set_j(&mut self, j: i32) {
self.j = j;
}
}
感觉下面的代码和前面的类似,为什么没有 second mutable borrow 的错误?
let mut foo = Foo::default();
foo.set_i(10);
foo.set_j(64);