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