Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 什么是;期望值,已发现特征“;什么意思?_Rust - Fatal编程技术网

Rust 什么是;期望值,已发现特征“;什么意思?

Rust 什么是;期望值,已发现特征“;什么意思?,rust,Rust,我正在尝试构建一个场景管理器,让您可以将场景推送到堆栈上。当每个场景从堆栈中弹出时,它将运行直到停止,然后我们重复 例如,游戏中的菜单;这是一个场景。当你关闭它时,它后面的游戏地图是另一个场景 pub trait Scene { fn start(&mut self) {} fn update(&mut self) {} fn stop(&mut self) {} fn is_active(&self) -> bool {

我正在尝试构建一个场景管理器,让您可以将场景推送到堆栈上。当每个场景从堆栈中弹出时,它将运行直到停止,然后我们重复

例如,游戏中的菜单;这是一个场景。当你关闭它时,它后面的游戏地图是另一个场景

pub trait Scene {
    fn 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>(scene: T) -> SceneManager
    where
        T: Scene + 'static,
    {
        SceneManager { scenes: vec![Box::new(scene)] }
    }
}

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

    struct Sample {
        running: bool,
    }

    impl Scene for Sample {
        fn start(&mut self) {
            self.running = true;
        }

        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_is_running() {
        let scene_manager = SceneManager::new(Scene);
    }
}
现在还不确定该怎么办。如何将我的场景放到场景的“堆栈”中?我实现了
SceneManager
new
功能,以获取与
场景定义匹配的类型(如果我理解正确的话)。这减轻了我必须指定特定大小的负担,从而允许我将其推送到堆而不是堆栈


我做错了什么?我该如何缓解手头的问题?这到底意味着什么?

这里
Scene
是特征的名称,但是
SceneManager::new
接受类型为
Scene
的值。你可能会想这样做

let scene_manager = SceneManager::new(Sample { running: false }); 

此处
Scene
是特征的名称,但
SceneManager::new
接受类型为
Scene
的值。你可能会想这样做

let scene_manager = SceneManager::new(Sample { running: false }); 

您可能希望将其初始化为
let scene_manager=SceneManager::new(示例{running:false})。这里的Scene是trait的
名称
,但是新函数接受一个类型为
Scena
的值,您首先希望
SceneManager::new(Scene)
做什么?您可能希望将其初始化为
let Scene\u manager=SceneManager::new(示例{running:false})。这里的场景是特征的
名称
,但是新函数接受类型为
Scena
的值,您最初期望
SceneManager::new(Scene)
做什么?