gpt4 book ai didi

rust - 为什么在尝试从采用 &self 的方法返回 Vec 时出现 "borrowed content"错误?

转载 作者:行者123 更新时间:2023-11-29 08:29:54 24 4
gpt4 key购买 nike

<分区>

是的,我有read the docs , 三次

我看过:Cannot move out of borrowed content in RustCannot move out of borrowed content .这些都不能回答我的问题,也不能帮助我更好地理解这里发生的事情。

考虑以下代码片段:

pub trait Scene {
fn on_start(&mut self) {}
fn update(&mut self) {}
fn stop(&mut self) {}
fn is_active(&self) -> bool { return false; }
}

pub struct SceneManager {
scenes: Vec<Box<Scene>>
}

impl SceneManager {
fn new<T>(mut scene: T) -> SceneManager where T: Scene + 'static {
scene.on_start();

SceneManager {
scenes: vec![Box::new(scene)]
}
}

fn update_children(&mut self) {
for mut scene in &mut self.scenes {
scene.update();
}
}
...

fn get_children(&self) -> Vec<Box<Scene>> {
return self.scenes
}

...
}

#[cfg(test)]
mod tests {
use super::*;

struct Sample {
running: bool
}

impl Scene for Sample {
fn update(&mut self) {
if self.running {
self.stop()
}
}

fn stop(&mut self) {
self.running = false;
}

fn is_active(&self) -> bool { self.running }
}

...

#[test]
fn test_no_scene_is_running() {
let mut scene_manager = SceneManager::new(Sample{running: true});
scene_manager.update_children();
let children = scene_manager.get_children();
for mut scenes in children {
assert!(!scene.is_active());
}
}
}

问题:

error[E0507]: cannot move out of borrowed content
--> src/main.rs:12:9
|
12 | self.scenes
| ^^^^ cannot move out of borrowed content

我们已经看过一百万次了。大多数答案都说使用 &self 而不是 self。好吧,这就是我在这里所做的。甚至 &mut self 也不起作用,虽然我没有在这里改变任何东西,所以不需要那样做。

请启发我并指出解释我如何不能这样做的文档。

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