我有一些Rust代码,感觉写得不够好。我想同时从结构体的字段中获取可变引用,但是Rust不允许同时存在多个可变引用。
目前我所做的就是基本上创建一个元组的新类型,然后将两种不同类型分开到单独的ref mut
模式匹配中。实际上并不是很喜欢这种方式的外观。
struct Foo;
impl Foo {
fn foo(&mut self, bar: &mut Bar) {
bar.bar();
}
}
struct Bar;
impl Bar {
fn bar(&mut self) {
println!("bar")
}
}
struct FooBar((Foo, Bar));
impl FooBar {
fn foobar(&mut self) {
let &mut FooBar((ref mut foo, ref mut bar)) = self;
foo.foo(bar);
println!("foobar");
}
}
fn main() {
let mut foobar = FooBar((Foo, Bar));
foobar.foobar();
}
Rust Playground
有没有更好的方法来完成这个任务?或者关于如何构建代码结构的一般性思路,以便我不需要这个newtype?