【问题标题】:What does "expected value, found trait" mean?“期望值,发现特征”是什么意思?
【发布时间】:2017-08-09 20:34:16
【问题描述】:

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

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

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);
    }
}

Scene 特征是为某些结构实现的,该结构包含某种方式来判断该场景是否正在运行。在这种情况下,一个名为Sample 的结构。

您为Sample 实现Scene,然后将该场景推送到场景管理器。

error[E0423]: expected value, found trait `Scene`
  --> src/engine/scene.rs:48:47
   |
48 |         let scene_manager = SceneManager::new(Scene);
   |                                               ^^^^^ not a value

目前还不确定该怎么做。如何让我的场景进入场景的“堆栈”?我实现了SceneManagernew 函数来获取类型匹配Scene 定义的类型(如果我理解正确的话)。这减轻了我必须指定特定大小的麻烦,从而允许我将其推送到堆而不是堆栈。

我做错了什么,如何缓解手头的问题,这甚至意味着什么?

【问题讨论】:

  • 您可能希望以let scene_manager = SceneManager::new(Sample{running:false}); 启动它。这里的场景是一个特征的name,但是新函数接受一个类型为Scena的值
  • 你希望SceneManager::new(Scene)首先做什么

标签: rust


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多