gpt4 book ai didi

容器对象的 Rust 模式

转载 作者:行者123 更新时间:2023-12-03 11:43:52 31 4
gpt4 key购买 nike

我有一个拥有各种其他结构的结构,例如

pub struct Computer {
monitor: Monitor,
keyboard: Keyboard,
mouse: Mouse,
printer: Printer
}
其中一些子对象相互需要,这会导致构建错误,例如“不能一次多次借用可变”。
self.mouse.change_orientation(&mut self.keyboard);

impl Mouse {
fn change_orientation(&mut self, keyboard: &mut Keyboard) {
// ignore the fact that the example does not make much sense,
// for some reason this method really needs to mutate both the mouse
// and the keyboard
}
}
如果您来自更多的 OOP 背景,我可以想象这是一个常见的问题/模式。有一个容器对象,它拥有执行不同任务的较小对象。当这些小对象中的一个需要引用另一个时,就 Rust 而言,该引用与容器对象相关联。
您将如何重构此代码以使其与 Rust 一起使用?我有点犹豫要不要继续 Rc<RefCell一切,因为我确实喜欢编译时借用检查器的好处。
编辑:抱歉,我犯了一个错误。正如评论中所指出的,我提供的示例确实有效。我的错。我在实际代码中试图做的是将整个容器作为可变引用传递,这当然不应该工作。

最佳答案

通常,这些问题可以通过借位拆分来解决:https://doc.rust-lang.org/nomicon/borrow-splitting.html
IE。你明确地让编译器明白你正在改变两个独立的实体。

关于容器对象的 Rust 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66329623/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com