gpt4 book ai didi

rust - "expected value, found trait"是什么意思?

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

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

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

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 trait 是为一些结构实现的,它包含一些方法来判断该场景是否正在运行。在本例中,一个名为 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 定义的类型(如果我理解正确的话)。这减轻了我必须指定特定大小的负担,从而允许我将其推送到堆而不是堆栈。

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

最佳答案

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

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

关于rust - "expected value, found trait"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45581356/

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