学 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);
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.