Rust 尝试使用Box应用多态性<_&燃气轮机;有错误吗;无法移动值。。。无法静态确定尺寸”;

Rust 尝试使用Box应用多态性<_&燃气轮机;有错误吗;无法移动值。。。无法静态确定尺寸”;,rust,Rust,我正在将锈病的多态性应用于我的问题。我想将此解决方案与Box一起使用,因为它看起来最直接、最简单,但不起作用 #[derive(Clone, Copy)] pub struct NewPost; #[derive(Clone, Copy)] pub struct Post; #[derive(Clone, Copy)] pub struct PgConnection; #[derive(Clone, Copy)] pub struct DBPost; pub trait DBAdapte

我正在将锈病的多态性应用于我的问题。我想将此解决方案与
Box
一起使用,因为它看起来最直接、最简单,但不起作用

#[derive(Clone, Copy)]
pub struct NewPost;

#[derive(Clone, Copy)]
pub struct Post;

#[derive(Clone, Copy)]
pub struct PgConnection;

#[derive(Clone, Copy)]
pub struct DBPost;

pub trait DBAdapter {
    fn create(self, post: NewPost) -> Post;
    fn read(self) -> Vec<Post>;
}

impl DBPost {
    // DATABASE classes
    pub fn establish_connection(self) -> PgConnection {
        unimplemented!()
    }
}

impl DBAdapter for DBPost {
    fn create(self, _post: NewPost) -> Post {
        unimplemented!()
    }

    fn read(self) -> Vec<Post> {
        unimplemented!()
    }
}

struct GetPostsCase {
    db: Box<dyn DBAdapter>,
}

impl GetPostsCase {
    pub fn new(db: Box<dyn DBAdapter>) -> GetPostsCase {
        GetPostsCase { db: db }
    }

    pub fn run(&self) -> Vec<Post> {
        let result = self.db.read();
        result
    }
}

您的
read
方法采用(未调整大小的)值,而不是采用引用(其大小始终相同)

您可以通过更改
DBAdapter

fn读取(自)->Vec{

fn读取(&self)->Vec{
//^---添加了符号和

(根据您的实现,您可能需要
&mut

为什么您的
DBAdapter
read
方法`使用
self
而不是
&mut self
?这涉及到移动db适配器,可能没有用。请尝试构建一个适配器。缺少太多方面,可能会让我们猜错您真正想做的事情。也可能是动态多态性sn并不是这里的最佳解决方案。谢谢,我很感激任何减少此示例的建议。事实上,我尝试了最简单的示例,但我不知道如何删除更多不必要的代码。关于此解决方案,抱歉,但我会反对,我问的是如何应用动态多态性,而不是它是否是最佳解决方案。因为你问的是如何应用为了制作MRE,这里是我的复制粘贴评论:如果您尝试在上复制错误,我们将更容易帮助您,如果可能的话,否则在全新的货运项目中,那么您的问题将包括附加信息。您可以使用以下选项来减少您在此处发布的原始代码。
fn read(self) -> Vec<Post> {
fn read(&self) -> Vec<Post> {
//      ^--- added the ampersand